From 6be280c6e14401c1c816955216557c0b686a4547 Mon Sep 17 00:00:00 2001 From: ihzero Date: Wed, 16 Nov 2022 20:42:41 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/upload.ts | 26 ++ src/components/Tinymce/index.ts | 4 + src/components/Tinymce/src/Editor.vue | 346 ++++++++++++++++++++++ src/components/Tinymce/src/ImgUpload.vue | 96 ++++++ src/components/Tinymce/src/helper.ts | 81 +++++ src/components/Tinymce/src/tinymce.ts | 13 + src/components/Upload/src/UploadModal.vue | 5 +- src/design/index.less | 6 +- src/views/system/links/LinksDrawer.vue | 82 +++++ src/views/system/links/index.vue | 32 +- src/views/system/links/links.data.ts | 160 ++++++++-- 11 files changed, 816 insertions(+), 35 deletions(-) create mode 100644 src/api/upload.ts create mode 100644 src/components/Tinymce/index.ts create mode 100644 src/components/Tinymce/src/Editor.vue create mode 100644 src/components/Tinymce/src/ImgUpload.vue create mode 100644 src/components/Tinymce/src/helper.ts create mode 100644 src/components/Tinymce/src/tinymce.ts create mode 100644 src/views/system/links/LinksDrawer.vue diff --git a/src/api/upload.ts b/src/api/upload.ts new file mode 100644 index 00000000..9c104193 --- /dev/null +++ b/src/api/upload.ts @@ -0,0 +1,26 @@ +import { defHttp } from '/@/utils/http/axios' +import { UploadFileParams } from '/#/axios' +import { useGlobSetting } from '/@/hooks/setting' + +const { uploadUrl = '' } = useGlobSetting() +interface UploadApiResult { + message: string + code: number + data: string +} + +/** + * @description: Upload interface + */ +export function uploadApi( + params: UploadFileParams, + onUploadProgress: (progressEvent: ProgressEvent) => void, +) { + return defHttp.uploadFile( + { + url: uploadUrl + '/api/web/upload', + onUploadProgress, + }, + params, + ) +} diff --git a/src/components/Tinymce/index.ts b/src/components/Tinymce/index.ts new file mode 100644 index 00000000..ce07f95e --- /dev/null +++ b/src/components/Tinymce/index.ts @@ -0,0 +1,4 @@ +import { withInstall } from '/@/utils/index'; +import tinymce from './src/Editor.vue'; + +export const Tinymce = withInstall(tinymce); diff --git a/src/components/Tinymce/src/Editor.vue b/src/components/Tinymce/src/Editor.vue new file mode 100644 index 00000000..0ebc8a89 --- /dev/null +++ b/src/components/Tinymce/src/Editor.vue @@ -0,0 +1,346 @@ + + + + + + + diff --git a/src/components/Tinymce/src/ImgUpload.vue b/src/components/Tinymce/src/ImgUpload.vue new file mode 100644 index 00000000..f878709d --- /dev/null +++ b/src/components/Tinymce/src/ImgUpload.vue @@ -0,0 +1,96 @@ + + + diff --git a/src/components/Tinymce/src/helper.ts b/src/components/Tinymce/src/helper.ts new file mode 100644 index 00000000..2526ae78 --- /dev/null +++ b/src/components/Tinymce/src/helper.ts @@ -0,0 +1,81 @@ +const validEvents = [ + 'onActivate', + 'onAddUndo', + 'onBeforeAddUndo', + 'onBeforeExecCommand', + 'onBeforeGetContent', + 'onBeforeRenderUI', + 'onBeforeSetContent', + 'onBeforePaste', + 'onBlur', + 'onChange', + 'onClearUndos', + 'onClick', + 'onContextMenu', + 'onCopy', + 'onCut', + 'onDblclick', + 'onDeactivate', + 'onDirty', + 'onDrag', + 'onDragDrop', + 'onDragEnd', + 'onDragGesture', + 'onDragOver', + 'onDrop', + 'onExecCommand', + 'onFocus', + 'onFocusIn', + 'onFocusOut', + 'onGetContent', + 'onHide', + 'onInit', + 'onKeyDown', + 'onKeyPress', + 'onKeyUp', + 'onLoadContent', + 'onMouseDown', + 'onMouseEnter', + 'onMouseLeave', + 'onMouseMove', + 'onMouseOut', + 'onMouseOver', + 'onMouseUp', + 'onNodeChange', + 'onObjectResizeStart', + 'onObjectResized', + 'onObjectSelected', + 'onPaste', + 'onPostProcess', + 'onPostRender', + 'onPreProcess', + 'onProgressState', + 'onRedo', + 'onRemove', + 'onReset', + 'onSaveContent', + 'onSelectionChange', + 'onSetAttrib', + 'onSetContent', + 'onShow', + 'onSubmit', + 'onUndo', + 'onVisualAid', +]; + +const isValidKey = (key: string) => validEvents.indexOf(key) !== -1; + +export const bindHandlers = (initEvent: Event, listeners: any, editor: any): void => { + Object.keys(listeners) + .filter(isValidKey) + .forEach((key: string) => { + const handler = listeners[key]; + if (typeof handler === 'function') { + if (key === 'onInit') { + handler(initEvent, editor); + } else { + editor.on(key.substring(2), (e: any) => handler(e, editor)); + } + } + }); +}; diff --git a/src/components/Tinymce/src/tinymce.ts b/src/components/Tinymce/src/tinymce.ts new file mode 100644 index 00000000..1374b4da --- /dev/null +++ b/src/components/Tinymce/src/tinymce.ts @@ -0,0 +1,13 @@ +// Any plugins you want to setting has to be imported +// Detail plugins list see https://www.tinymce.com/docs/plugins/ +// Custom builds see https://www.tinymce.com/download/custom-builds/ +// colorpicker/contextmenu/textcolor plugin is now built in to the core editor, please remove it from your editor configuration + +export const plugins = [ + 'advlist anchor autolink autosave code codesample directionality fullscreen hr insertdatetime link lists media nonbreaking noneditable pagebreak paste preview print save searchreplace spellchecker tabfocus template textpattern visualblocks visualchars wordcount', +]; + +export const toolbar = [ + 'fontsizeselect lineheight searchreplace bold italic underline strikethrough alignleft aligncenter alignright outdent indent blockquote undo redo removeformat subscript superscript code codesample', + 'hr bullist numlist link preview anchor pagebreak insertdatetime media forecolor backcolor fullscreen', +]; diff --git a/src/components/Upload/src/UploadModal.vue b/src/components/Upload/src/UploadModal.vue index bf2ebde2..a568ae8a 100644 --- a/src/components/Upload/src/UploadModal.vue +++ b/src/components/Upload/src/UploadModal.vue @@ -192,6 +192,7 @@ item.percent = complete }, ) + item.status = UploadResultStatus.SUCCESS item.responseData = data return { @@ -249,7 +250,9 @@ for (const item of fileListRef.value) { const { status, responseData } = item if (status === UploadResultStatus.SUCCESS && responseData) { - fileList.push(responseData.url) + console.log(responseData?.data?.file) + + fileList.push(responseData?.data?.file) } } // 存在一个上传成功的即可保存 diff --git a/src/design/index.less b/src/design/index.less index 7348bfcb..21ff6df5 100644 --- a/src/design/index.less +++ b/src/design/index.less @@ -22,9 +22,9 @@ html { src: url('../assets/fonts/pmzd.TTF'); } -.ant-modal-wrap { - z-index: 9999999 !important; -} +// .ant-modal-wrap { +// z-index: 9999999 !important; +// } html, body { diff --git a/src/views/system/links/LinksDrawer.vue b/src/views/system/links/LinksDrawer.vue new file mode 100644 index 00000000..25f24ee4 --- /dev/null +++ b/src/views/system/links/LinksDrawer.vue @@ -0,0 +1,82 @@ + + diff --git a/src/views/system/links/index.vue b/src/views/system/links/index.vue index 1fe9ebb8..6e790be9 100644 --- a/src/views/system/links/index.vue +++ b/src/views/system/links/index.vue @@ -1,5 +1,13 @@