From 251d2411f235e23209d57173857e05b637729ce8 Mon Sep 17 00:00:00 2001
From: LiuHao <liuhaoai545@gmail.com>
Date: 星期日, 02 四月 2023 01:01:56 +0800
Subject: [PATCH] refactor ts

---
 src/components/Editor/index.vue |  104 ++++++++++++++++++++++++++-------------------------
 1 files changed, 53 insertions(+), 51 deletions(-)

diff --git a/src/components/Editor/index.vue b/src/components/Editor/index.vue
index bc8da7b..b7c18c3 100644
--- a/src/components/Editor/index.vue
+++ b/src/components/Editor/index.vue
@@ -1,36 +1,8 @@
-<template>
-  <div>
-    <el-upload
-        :action="uploadUrl"
-        :before-upload="handleBeforeUpload"
-        :on-success="handleUploadSuccess"
-        :on-error="handleUploadError"
-        class="editor-img-uploader"
-        name="file"
-        :show-file-list="false"
-        :headers="headers"
-        style="display: none"
-        ref="uploadRef"
-        v-if="type == 'url'"
-    >
-    </el-upload>
-    <div class="editor">
-      <quill-editor
-          ref="myQuillEditor"
-          v-model:content="content"
-          contentType="html"
-          @textChange="(e) => $emit('update:modelValue', content)"
-          :options="options"
-          :style="styles"
-      />
-    </div>
-  </div>
-</template>
-
-<script setup>
+<script setup lang="ts">
 import { QuillEditor, Quill } from '@vueup/vue-quill';
 import '@vueup/vue-quill/dist/vue-quill.snow.css';
 import { getToken } from "@/utils/auth";
+import { ComponentInternalInstance } from "vue";
 
 const props = defineProps({
   /* 缂栬緫鍣ㄧ殑鍐呭 */
@@ -64,10 +36,12 @@
   }
 });
 
-const { proxy } = getCurrentInstance();
-// 涓婁紶鐨勫浘鐗囨湇鍔″櫒鍦板潃
-const uploadUrl = ref(import.meta.env.VITE_APP_BASE_API + "/system/oss/upload");
-const headers = ref({ Authorization: "Bearer " + getToken() });
+const { proxy } = getCurrentInstance() as ComponentInternalInstance;
+
+const upload = reactive<UploadOption>({
+  headers: { Authorization: "Bearer " + getToken() },
+  url: import.meta.env.VITE_APP_BASE_API + '/system/oss/upload'
+})
 const myQuillEditor = ref();
 
 const options = ref({
@@ -90,10 +64,10 @@
         ["link", "image", "video"]                       // 閾炬帴銆佸浘鐗囥�佽棰�
       ],
       handlers: {
-        image: function (value) {
+        image: function (value: any) {
           if (value) {
             // 璋冪敤element鍥剧墖涓婁紶
-            document.querySelector(".editor-img-uploader>.el-upload").click();
+            (document.querySelector(".editor-img-uploader>.el-upload") as HTMLDivElement)?.click();
           } else {
             Quill.format("image", true);
           }
@@ -106,7 +80,7 @@
 });
 
 const styles = computed(() => {
-  let style = {};
+  let style: any = {};
   if (props.minHeight) {
     style.minHeight = `${props.minHeight}px`;
   }
@@ -118,50 +92,78 @@
 
 const content = ref("");
 watch(() => props.modelValue, (v) => {
-  if (v !== content) {
+  if (v !== content.value) {
     content.value = v === undefined ? "<p></p>" : v;
   }
 }, { immediate: true });
 
 // 鍥剧墖涓婁紶鎴愬姛杩斿洖鍥剧墖鍦板潃
-function handleUploadSuccess(res, file) {
+const handleUploadSuccess = (res: any) => {
   // 鑾峰彇瀵屾枃鏈疄渚�
   let quill = toRaw(myQuillEditor.value).getQuill();
   // 濡傛灉涓婁紶鎴愬姛
-  if (res.code == 200) {
+  if (res.code === 200) {
     // 鑾峰彇鍏夋爣浣嶇疆
     let length = quill.selection.savedRange.index;
     // 鎻掑叆鍥剧墖锛宺es涓烘湇鍔″櫒杩斿洖鐨勫浘鐗囬摼鎺ュ湴鍧�
     quill.insertEmbed(length, "image", res.data.url);
     // 璋冩暣鍏夋爣鍒版渶鍚�
     quill.setSelection(length + 1);
-    proxy.$modal.closeLoading();
+    proxy?.$modal.closeLoading();
   } else {
-    proxy.$modal.loading(res.msg);
-    proxy.$modal.closeLoading();
+    proxy?.$modal.loading(res.msg);
+    proxy?.$modal.closeLoading();
   }
 }
 
 // 鍥剧墖涓婁紶鍓嶆嫤鎴�
-function handleBeforeUpload(file) {
+const handleBeforeUpload = (file: any) => {
   // 鏍℃鏂囦欢澶у皬
   if (props.fileSize) {
     const isLt = file.size / 1024 / 1024 < props.fileSize;
     if (!isLt) {
-      proxy.$modal.msgError(`涓婁紶鏂囦欢澶у皬涓嶈兘瓒呰繃 ${props.fileSize} MB!`);
+      proxy?.$modal.msgError(`涓婁紶鏂囦欢澶у皬涓嶈兘瓒呰繃 ${props.fileSize} MB!`);
       return false;
     }
   }
-  proxy.$modal.loading("姝e湪涓婁紶鏂囦欢锛岃绋嶅��...");
+  proxy?.$modal.loading('姝e湪涓婁紶鏂囦欢锛岃绋嶅��...');
   return true;
 }
 
 // 鍥剧墖澶辫触鎷︽埅
-function handleUploadError(err) {
-  proxy.$modal.msgError("涓婁紶鏂囦欢澶辫触");
+const handleUploadError = (err: any) => {
+  console.error(err);
+  proxy?.$modal.msgError('涓婁紶鏂囦欢澶辫触');
 }
-
 </script>
+
+<template>
+	<div>
+		<el-upload
+			:action="upload.url"
+			:before-upload="handleBeforeUpload"
+			:on-success="handleUploadSuccess"
+			:on-error="handleUploadError"
+			class="editor-img-uploader"
+			name="file"
+			:show-file-list="false"
+			:headers="upload.headers"
+			style="display: none"
+			v-if="type === 'url'"
+		>
+		</el-upload>
+		<div class="editor">
+			<quill-editor
+				ref="myQuillEditor"
+				v-model:content="content"
+				contentType="html"
+				@textChange="(e: any) => $emit('update:modelValue', content)"
+				:options="options"
+				:style="styles"
+			/>
+		</div>
+	</div>
+</template>
 
 <style>
 .editor, .ql-toolbar {
@@ -175,9 +177,9 @@
   content: "璇疯緭鍏ラ摼鎺ュ湴鍧�:";
 }
 .ql-snow .ql-tooltip.ql-editing a.ql-action::after {
-  border-right: 0px;
+  border-right: 0;
   content: "淇濆瓨";
-  padding-right: 0px;
+  padding-right: 0;
 }
 
 .ql-snow .ql-tooltip[data-mode="video"]::before {

--
Gitblit v1.9.3