Procházet zdrojové kódy

Merge branch 'pptToJson' of http://git.dayaedu.com/huangqiyong/pptList into test-online

黄琪勇 před 3 týdny
rodič
revize
6a518bc7b7

+ 1 - 0
dist/assets/FullscreenSpin-BFrMTfz_.css

@@ -0,0 +1 @@
+.fullscreen-spin[data-v-4e064927]{position:fixed;top:0;bottom:0;left:0;right:0;z-index:1000000000;display:flex;justify-content:center;align-items:center;background-color:#0009}.fullscreen-spin .spin[data-v-4e064927]{display:flex;flex-direction:column;align-items:center;justify-content:center}.fullscreen-spin .spin .progress[data-v-4e064927]{width:280px;height:6px}.fullscreen-spin .spin .progress[data-v-4e064927] .el-progress-bar .el-progress-bar__inner{background-color:#20bdff}.fullscreen-spin .spin .progress[data-v-4e064927] .el-progress-bar .el-progress-bar__outer{background-color:#ffffff4d}.fullscreen-spin .spin .text[data-v-4e064927]{margin-top:24px;font-weight:400;font-size:14px;color:#fff;line-height:20px}

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 5 - 0
dist/assets/FullscreenSpin-BV461PiL.js


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
dist/assets/index-9rUjWqUL.css


+ 0 - 1
dist/assets/index-B2eYnimm.js

@@ -1 +0,0 @@
-import{u as s,af as r}from"./index-CKoL8ziO.js";import{a5 as c,cA as n,R as p,ae as t,af as _,al as u,ag as i,bH as f}from"./index-Dfq1r8b9.js";const l={class:"pptScreen"},m=c({__name:"pptScreen",setup(d){const a=n(),e=p(!0),o=s();return a.setScreenMode("pptScreen"),o.initPPTData().then(()=>{e.value=!1}),(S,k)=>(t(),_("div",l,[e.value?i("",!0):(t(),u(r,{key:0}))]))}}),h=f(m,[["__scopeId","data-v-678905e9"]]);export{h as default};

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
dist/assets/index-B4Nhv2oV.js


+ 1 - 1
dist/assets/index-Bn69Jo4K.js → dist/assets/index-B8Kw2YJl.js

@@ -1 +1 @@
-import{_ as a}from"./404-R0y5dkvZ.js";import{a5 as o,en as t,ae as r,af as c,bJ as _,bK as d,ak as s,bH as p}from"./index-Dfq1r8b9.js";const i=e=>(_("data-v-dda25179"),e=e(),d(),e),n={class:"errorPage"},m=i(()=>s("div",{class:"error"},[s("img",{src:a,class:"img",alt:""}),s("div",{class:"tit"},"页面找不到了~")],-1)),l=[m],f=o({__name:"errorPage",setup(e){return t(),(u,h)=>(r(),c("div",n,l))}}),I=p(f,[["__scopeId","data-v-dda25179"]]);export{I as default};
+import{_ as a}from"./404-R0y5dkvZ.js";import{a5 as o,en as t,ae as r,af as c,bE as _,bF as d,ak as s,bC as p}from"./index-DAOGEzEW.js";const i=e=>(_("data-v-dda25179"),e=e(),d(),e),n={class:"errorPage"},m=i(()=>s("div",{class:"error"},[s("img",{src:a,class:"img",alt:""}),s("div",{class:"tit"},"页面找不到了~")],-1)),l=[m],f=o({__name:"errorPage",setup(e){return t(),(u,h)=>(r(),c("div",n,l))}}),I=p(f,[["__scopeId","data-v-dda25179"]]);export{I as default};

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 4 - 0
dist/assets/index-BKAm1MQU.js


+ 1 - 0
dist/assets/index-BW8Ftn0e.js

@@ -0,0 +1 @@
+import{a4 as r}from"./index-BKAm1MQU.js";import{u as s}from"./pptWork-qsbrnbxO.js";import{a5 as c,cv as n,R as p,ae as t,af as _,al as i,ag as m,bC as u}from"./index-DAOGEzEW.js";const f={class:"pptScreen"},l=c({__name:"pptScreen",setup(d){const a=n(),e=p(!0),o=s();return a.setScreenMode("pptScreen"),o.initPPTData().then(()=>{e.value=!1}),(S,k)=>(t(),_("div",f,[e.value?m("",!0):(t(),i(r,{key:0}))]))}}),x=u(l,[["__scopeId","data-v-678905e9"]]);export{x as default};

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
dist/assets/index-Bg0UUKuG.js


+ 1 - 0
dist/assets/index-Bv213pm3.css

@@ -0,0 +1 @@
+.pptToJson[data-v-2547484f]{padding:50px 0 0 100px}.pptToJson .input[data-v-2547484f]{display:none}

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
dist/assets/index-CFnR_WmC.js


+ 0 - 1
dist/assets/index-CGbU_TgR.js

@@ -1 +0,0 @@
-import{u as c,af as l}from"./index-CKoL8ziO.js";import{w as p,bA as d,a5 as g,cA as m,R as t,ae as r,af as u,al as f,ag as w,bH as k}from"./index-Dfq1r8b9.js";import"./shapes-zOeoGICe.js";const S=()=>{function o(a){if(window.parent===window)return;const{api:e,playState:n}=a.data||{};e==="headerTogge"?window.parent.postMessage({api:"headerTogge",playState:n},"*"):e==="changeTogge"?window.parent.postMessage({api:"changeTogge"},"*"):["clickTempo","clickViewFigner"].includes(e)&&window.parent.postMessage({api:e},"*")}p(()=>{window.addEventListener("message",o)}),d(()=>{window.removeEventListener("message",o)})},_=g({__name:"mobileScreen",setup(o){S();const a=m(),e=t(!0),n=t(!1),i=c();return a.setScreenMode("mobileScreen"),i.initPPTData().then(()=>{e.value=!1}),(v,s)=>(r(),u("div",{class:"mobileScreen",onClick:s[0]||(s[0]=b=>n.value=!1)},[e.value?w("",!0):(r(),f(l,{key:0}))]))}}),P=k(_,[["__scopeId","data-v-90b2692a"]]);export{P as default};

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 4
dist/assets/index-CKoL8ziO.js


+ 1 - 0
dist/assets/index-D2X4GZ40.js

@@ -0,0 +1 @@
+import{a4 as c}from"./index-BKAm1MQU.js";import{u as l}from"./pptWork-qsbrnbxO.js";import{w as p,bz as d,a5 as g,cv as m,R as t,ae as r,af as u,al as f,ag as w,bC as k}from"./index-DAOGEzEW.js";import"./shapes-ErYTryX4.js";const v=()=>{function o(a){if(window.parent===window)return;const{api:e,playState:n}=a.data||{};e==="headerTogge"?window.parent.postMessage({api:"headerTogge",playState:n},"*"):e==="changeTogge"?window.parent.postMessage({api:"changeTogge"},"*"):["clickTempo","clickViewFigner"].includes(e)&&window.parent.postMessage({api:e},"*")}p(()=>{window.addEventListener("message",o)}),d(()=>{window.removeEventListener("message",o)})},S=g({__name:"mobileScreen",setup(o){v();const a=m(),e=t(!0),n=t(!1),i=l();return a.setScreenMode("mobileScreen"),i.initPPTData().then(()=>{e.value=!1}),(_,s)=>(r(),u("div",{class:"mobileScreen",onClick:s[0]||(s[0]=b=>n.value=!1)},[e.value?w("",!0):(r(),f(c,{key:0}))]))}}),P=k(S,[["__scopeId","data-v-90b2692a"]]);export{P as default};

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 2 - 2
dist/assets/index-DAOGEzEW.js


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
dist/assets/index-DSYx5nAI.css


+ 1 - 1
dist/assets/index-zVbDaoAi.js → dist/assets/index-dtnvyw8o.js

@@ -1 +1 @@
-import{_ as t}from"./404-R0y5dkvZ.js";import{E as c}from"./index-DmGd9MYx.js";import{a5 as n,ae as i,af as r,ak as o,aq as _,am as d,P as l,aS as p,bJ as m,bK as f,bH as u}from"./index-Dfq1r8b9.js";const s=a=>(m("data-v-340bbdaa"),a=a(),f(),a),h={class:"login"},b={class:"error"},g=s(()=>o("img",{src:t,class:"img",alt:""},null,-1)),k=s(()=>o("div",{class:"tit"},"登录已过期或服务器错误!",-1)),v=n({__name:"login",setup(a){function e(){window.close()}return(x,B)=>(i(),r("div",h,[o("div",b,[g,k,_(l(c),{class:"backBtn",type:"primary",plain:"",onClick:e},{default:d(()=>[p("关闭页面")]),_:1})])]))}}),C=u(v,[["__scopeId","data-v-340bbdaa"]]);export{C as default};
+import{_ as t}from"./404-R0y5dkvZ.js";import{E as c}from"./index-CFnR_WmC.js";import{a5 as n,ae as i,af as r,ak as o,aq as _,am as d,P as l,aS as p,bE as m,bF as f,bC as u}from"./index-DAOGEzEW.js";const s=a=>(m("data-v-340bbdaa"),a=a(),f(),a),h={class:"login"},b={class:"error"},g=s(()=>o("img",{src:t,class:"img",alt:""},null,-1)),k=s(()=>o("div",{class:"tit"},"登录已过期或服务器错误!",-1)),v=n({__name:"login",setup(a){function e(){window.close()}return(x,B)=>(i(),r("div",h,[o("div",b,[g,k,_(l(c),{class:"backBtn",type:"primary",plain:"",onClick:e},{default:d(()=>[p("关闭页面")]),_:1})])]))}}),I=u(v,[["__scopeId","data-v-340bbdaa"]]);export{I as default};

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
dist/assets/pptWork-qsbrnbxO.js


+ 1 - 1
dist/assets/shapes-zOeoGICe.js → dist/assets/shapes-ErYTryX4.js

@@ -1,4 +1,4 @@
-import{cD as k,bB as $1}from"./index-Dfq1r8b9.js";import{ag as Z,ah as H1,ai as U,aj as n0,ak as c0,al as i0,am as j1,an as K1,ao as Y1,ap as R}from"./index-CKoL8ziO.js";var z1={exports:{}};/*!
+import{cy as k,cz as $1}from"./index-DAOGEzEW.js";import{a5 as Z,a6 as H1,a7 as U,a8 as n0,a9 as c0,aa as i0,ab as j1,ac as K1,ad as Y1,ae as R}from"./index-BKAm1MQU.js";var z1={exports:{}};/*!
  * clipboard.js v2.0.11
  * https://clipboardjs.com/
  *

+ 1 - 1
dist/index.html

@@ -10,7 +10,7 @@
     <meta name="description" content="ppt编辑器" />
     <meta name="keywords" content="ppt,powerpoint,office powerpoint,在线ppt,幻灯片,演示文稿,ppt在线制作,Vue3,TypeScript" />
     <title>PPT</title>
-    <script type="module" crossorigin src="./assets/index-Dfq1r8b9.js"></script>
+    <script type="module" crossorigin src="./assets/index-DAOGEzEW.js"></script>
     <link rel="stylesheet" crossorigin href="./assets/index-AavUEaYy.css">
   </head>
   <body>

+ 5 - 0
src/router/routers.ts

@@ -27,6 +27,11 @@ export const constRoutes: Array<RouteRecordRaw> = [
     component: () => import("@/viewsframe/login")
   },
   {
+    path: "/pptToJson",
+    name: "pptToJson",
+    component: () => import("@/viewsframe/pptToJson")
+  },
+  {
     path: "/:pathMatch(.*)*",
     name: "errorPage",
     component: () => import("@/viewsframe/errorPage")

+ 2 - 0
src/viewsframe/pptToJson/index.ts

@@ -0,0 +1,2 @@
+import pptToJson from "./pptToJson.vue"
+export default pptToJson

+ 144 - 0
src/viewsframe/pptToJson/pptToJson.vue

@@ -0,0 +1,144 @@
+<template>
+  <div class="pptToJson">
+    <div class="file-input" @click="handleClick()">
+      <ElButton type="primary">点击导入</ElButton>
+      <input webkitdirectory directory class="input" type="file" name="upload" ref="inputRef" @change="$event => handleChange($event)" />
+    </div>
+    <FullscreenSpin :loading="fullscreenSpinData.loading" :progress="fullscreenSpinData.progress" :tip="fullscreenSpinData.tip" />
+  </div>
+</template>
+
+<script setup lang="ts">
+import { ElButton } from "element-plus"
+import { computed, ref, onMounted } from "vue"
+import { initWorker, addCourseWareTask } from "@/worker/useCoursewaresWorker"
+import { ElMessage } from "element-plus"
+import FullscreenSpin from "@/components/FullscreenSpin.vue"
+
+const inputRef = ref<HTMLInputElement>()
+let filesData: FileList | null
+let filesIndex = 0
+
+const handleClick = () => {
+  if (!inputRef.value) return
+  filesData = null
+  filesIndex = 0
+  inputRef.value.value = ""
+  inputRef.value.click()
+}
+
+function handleChange(e: Event) {
+  filesData = (e.target as HTMLInputElement).files
+  console.log(filesData, "filse")
+  importPPTXFile()
+}
+
+onMounted(() => {
+  initWorker()
+})
+
+const importing = ref(false)
+const importProgress = ref(0)
+
+// 导入PPTX文件
+function importPPTXFile() {
+  if (!filesData?.length) {
+    ElMessage({
+      showClose: true,
+      message: "没有文件!",
+      type: "error",
+      duration: 0
+    })
+    return
+  }
+  const file = filesData[filesIndex]
+  importing.value = true
+  importProgress.value = 0
+  const suffix = `.${file.name.split(".")?.reverse()[0]}`
+  addCourseWareTask(
+    {
+      type: "uploadCourseware",
+      extra: {
+        outputName: file.name.trim(),
+        name: file.name.replace(suffix, "").trim(),
+        type: file.type,
+        suffix,
+        path: file.webkitRelativePath,
+        paths: file.webkitRelativePath.split("/"),
+        files: file
+      }
+    },
+    async (e: any) => {
+      importProgress.value = parseInt(e.progress)
+      if (e.progress === 100) {
+        if (e.status === "done") {
+          const response = await fetch(e.extra.url)
+          const data = await response.json()
+          const jsonStr = JSON.stringify(data)
+          const blob = new Blob([jsonStr], { type: "application/json" })
+          const blobUrl = URL.createObjectURL(blob)
+          const a = document.createElement("a")
+          a.href = blobUrl
+          a.download = getFileNameWithoutExtension(file.name.trim()) + ".json"
+          document.body.appendChild(a)
+          a.click()
+          document.body.removeChild(a)
+          URL.revokeObjectURL(blobUrl)
+          if (filesData!.length > filesIndex + 1) {
+            filesIndex++
+            importPPTXFile()
+          } else {
+            ElMessage({
+              showClose: true,
+              message: `${filesIndex + 1}个文件,下载成功!`,
+              type: "success",
+              duration: 0
+            })
+            importing.value = false
+          }
+        } else if (e.status !== "doing") {
+          importing.value = false
+          ElMessage({
+            showClose: true,
+            message: `第${filesIndex + 1}个,${file.name.trim()},下载失败!`,
+            type: "error",
+            duration: 0
+          })
+        }
+      }
+    }
+  ).catch(err => {
+    importing.value = false
+    ElMessage({
+      showClose: true,
+      message: `第${filesIndex + 1}个,${file.name.trim()},下载失败!`,
+      type: "error",
+      duration: 0
+    })
+    console.log(err)
+  })
+}
+const fullscreenSpinData = computed(() => {
+  return {
+    loading: importing.value,
+    progress: importProgress.value,
+    tip: `第${filesIndex + 1}(${filesData?.length && filesData.length})个,${filesData?.length && filesData[filesIndex]?.name?.trim()},正在下载,请稍等…`
+  }
+})
+function getFileNameWithoutExtension(filename: string) {
+  const lastDotIndex = filename.lastIndexOf(".")
+  if (lastDotIndex === -1) {
+    return filename
+  }
+  return filename.substring(0, lastDotIndex)
+}
+</script>
+
+<style lang="scss" scoped>
+.pptToJson {
+  padding: 50px 0 0 100px;
+  .input {
+    display: none;
+  }
+}
+</style>

Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů