2026-02-24 10:06:48 +08:00
|
|
|
<template>
|
|
|
|
|
<view>
|
|
|
|
|
<view>
|
|
|
|
|
|
|
|
|
|
<view class='wrapper'>
|
|
|
|
|
<view class='toolbar' @tap="format" style="height: 160px;overflow-y: auto;">
|
|
|
|
|
<view :class="formats.bold ? 'ql-active' : ''" class="iconfont icon-zitijiacu" data-name="bold">
|
|
|
|
|
</view>
|
|
|
|
|
<view :class="formats.italic ? 'ql-active' : ''" class="iconfont icon-zitixieti" data-name="italic">
|
|
|
|
|
</view>
|
|
|
|
|
<view :class="formats.underline ? 'ql-active' : ''" class="iconfont icon-zitixiahuaxian"
|
|
|
|
|
data-name="underline"></view>
|
|
|
|
|
<view :class="formats.strike ? 'ql-active' : ''" class="iconfont icon-zitishanchuxian"
|
|
|
|
|
data-name="strike"></view>
|
|
|
|
|
<!-- #ifndef MP-BAIDU -->
|
|
|
|
|
<view :class="formats.align === 'left' ? 'ql-active' : ''" class="iconfont icon-zuoduiqi"
|
|
|
|
|
data-name="align" data-value="left"></view>
|
|
|
|
|
<!-- #endif -->
|
|
|
|
|
<view :class="formats.align === 'center' ? 'ql-active' : ''" class="iconfont icon-juzhongduiqi"
|
|
|
|
|
data-name="align" data-value="center"></view>
|
|
|
|
|
<view :class="formats.align === 'right' ? 'ql-active' : ''" class="iconfont icon-youduiqi"
|
|
|
|
|
data-name="align" data-value="right"></view>
|
|
|
|
|
<view :class="formats.align === 'justify' ? 'ql-active' : ''" class="iconfont icon-zuoyouduiqi"
|
|
|
|
|
data-name="align" data-value="justify"></view>
|
|
|
|
|
<!-- #ifndef MP-BAIDU -->
|
|
|
|
|
<view :class="formats.lineHeight ? 'ql-active' : ''" class="iconfont icon-line-height"
|
|
|
|
|
data-name="lineHeight" data-value="2"></view>
|
|
|
|
|
<view :class="formats.letterSpacing ? 'ql-active' : ''" class="iconfont icon-Character-Spacing"
|
|
|
|
|
data-name="letterSpacing" data-value="2em"></view>
|
|
|
|
|
<view :class="formats.marginTop ? 'ql-active' : ''" class="iconfont icon-722bianjiqi_duanqianju"
|
|
|
|
|
data-name="marginTop" data-value="20px"></view>
|
|
|
|
|
<view :class="formats.marginBottom ? 'ql-active' : ''" class="iconfont icon-723bianjiqi_duanhouju"
|
|
|
|
|
data-name="marginBottom" data-value="20px"></view>
|
|
|
|
|
<!-- #endif -->
|
|
|
|
|
|
|
|
|
|
<view class="iconfont icon-clearedformat" @tap="removeFormat"></view>
|
|
|
|
|
|
|
|
|
|
<!-- #ifndef MP-BAIDU -->
|
|
|
|
|
<!-- <view :class="formats.fontFamily ? 'ql-active' : ''" class="iconfont icon-font"
|
|
|
|
|
data-name="fontFamily" data-value="Pacifico"></view> -->
|
|
|
|
|
<view :class="formats.fontSize === '24px' ? 'ql-active' : ''" class="iconfont icon-fontsize" data-name="fontSize" data-value="24px"></view>
|
|
|
|
|
<!-- #endif -->
|
|
|
|
|
<view :class="formats.color === '#0000ff' ? 'ql-active' : ''" class="iconfont icon-text_color" data-name="color" data-value="#0000ff"></view>
|
|
|
|
|
<view :class="formats.backgroundColor === '#00ff00' ? 'ql-active' : ''" class="iconfont icon-fontbgcolor" data-name="backgroundColor" data-value="#00ff00"></view>
|
|
|
|
|
<view class="iconfont icon-date" @tap="insertDate"></view>
|
|
|
|
|
<view class="iconfont icon--checklist" data-name="list" data-value="check"></view>
|
|
|
|
|
<view :class="formats.list === 'ordered' ? 'ql-active' : ''" class="iconfont icon-youxupailie" data-name="list" data-value="ordered"></view>
|
|
|
|
|
<view :class="formats.list === 'bullet' ? 'ql-active' : ''" class="iconfont icon-wuxupailie" data-name="list" data-value="bullet"></view>
|
|
|
|
|
|
|
|
|
|
<view class="iconfont icon-undo" @tap="undo"></view>
|
|
|
|
|
<view class="iconfont icon-redo" @tap="redo"></view>
|
|
|
|
|
|
|
|
|
|
<view class="iconfont icon-outdent" data-name="indent" data-value="-1"></view>
|
|
|
|
|
<view class="iconfont icon-indent" data-name="indent" data-value="+1"></view>
|
|
|
|
|
<view class="iconfont icon-fengexian" @tap="insertDivider"></view>
|
|
|
|
|
<view class="iconfont icon-charutupian" @tap="insertImage"></view>
|
|
|
|
|
<view :class="formats.header === 1 ? 'ql-active' : ''" class="iconfont icon-format-header-1" data-name="header" :data-value="1"></view>
|
|
|
|
|
<view :class="formats.script === 'sub' ? 'ql-active' : ''" class="iconfont icon-zitixiabiao" data-name="script" data-value="sub"></view>
|
|
|
|
|
<view :class="formats.script === 'super' ? 'ql-active' : ''" class="iconfont icon-zitishangbiao" data-name="script" data-value="super"></view>
|
|
|
|
|
|
|
|
|
|
<view class="iconfont icon-shanchu" @tap="clear"></view>
|
|
|
|
|
|
|
|
|
|
<view :class="formats.direction === 'rtl' ? 'ql-active' : ''" class="iconfont icon-direction-rtl" data-name="direction" data-value="rtl"></view>
|
|
|
|
|
</view>
|
|
|
|
|
|
|
|
|
|
<view class="editor-wrapper">
|
|
|
|
|
<editor
|
|
|
|
|
id="editor"
|
|
|
|
|
class="ql-container"
|
|
|
|
|
placeholder="开始输入..."
|
|
|
|
|
show-img-size
|
|
|
|
|
show-img-toolbar
|
|
|
|
|
show-img-resize
|
|
|
|
|
@statuschange="onStatusChange"
|
|
|
|
|
:read-only="readOnly"
|
|
|
|
|
@ready="onEditorReady"
|
|
|
|
|
@blur="blur"
|
|
|
|
|
@input="whenInput"
|
|
|
|
|
></editor>
|
|
|
|
|
<!-- <view class="" style="text-align: center;margin-bottom: 30rpx;">
|
|
|
|
|
<u-button style="" type="primary" size="medium" @click="clickBtnSubmit">发布</u-button>
|
|
|
|
|
</view> -->
|
|
|
|
|
</view>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<!-- 等同于 @import "./editor-icon.css"; -->
|
|
|
|
|
<style>
|
|
|
|
|
@font-face {
|
|
|
|
|
font-family: 'iconfont';
|
|
|
|
|
src: url('data:font/truetype;charset=utf-8;base64,AAEAAAANAIAAAwBQRkZUTYZt980AACuYAAAAHEdERUYAKQBBAAAreAAAAB5PUy8yPJdOmAAAAVgAAABWY21hcLyvuFAAAAJMAAACGmdhc3D//wADAAArcAAAAAhnbHlm1+PZcgAABOAAACD0aGVhZBRVFL8AAADcAAAANmhoZWEISgQAAAABFAAAACRobXR4TS8LYAAAAbAAAACcbG9jYQhHD/wAAARoAAAAeG1heHABTgChAAABOAAAACBuYW1lKeYRVQAAJdQAAAKIcG9zdLoCe30AAChcAAADEgABAAAAAQAAUo9exF8PPPUACwQAAAAAANhk6GIAAAAA2GToYgAA/34EbAOAAAAACAACAAAAAAAAAAEAAAOA/4AAXARsAAAAAARsAAEAAAAAAAAAAAAAAAAAAAATAAEAAAA7AJUACQAAAAAAAgAAAAoACgAAAP8AAAAAAAAAAQQBAZAABQAAAokCzAAAAI8CiQLMAAAB6wAyAQgAAAIABQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGZFZABA5ifspQOA/4AAXAOAAIIAAAABAAAAAAAABAAAAAAAAAABVQAABAAALwQAAJ0EAAAeBAAAQARsAAAEAAACBAAANwQAADcEAACVBAAAmgQAAJoEAAA+BAAAQAQAACUEAQAABAAAQAAnAIAAgABgAIAAgACAAIAAeAAAAFAAMABgAEAAYAAgAEAAOQAgAGAAYACAAD8AYAAgAEAA1wBeACEAwACAAOAAogBgABoAIQBgADIAiwBAAAAAAwAAAAMAAAAcAAEAAAAAARQAAwABAAAAHAAEAPgAAAA6ACAABAAa5ifmK+Yx5jPmPuZN5mDmZOZu5njmfuaE5ujm/ecs513n+Ohg6GXpZOso7AnsE+x87JTsnuyg7KX//wAA5ifmK+Yx5jPmPuZN5l/mZOZt5njmfuaE5ujm/ecs51zn+Ohg6GPpZOso7AnsE+x67H/snuyg7KX//xncGdkZ1BnTGckZuxmqGacZnxmWGZEZjBkpGRUY5xi4GB4Xtxe1FrcU9BQUFAsTpROjE5oTmROVAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBgAAAQAAAAAAAAABAgAAAAIAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgB8ANIA7AGaAiwCugNGBCAEgATiBRgFfgXyBl4GfAbGBwAHOAeWB7wH5ggoCGgI5AlSCaIKIgqmCxILPAtKC64L+gw8DIQMpgzKDQYNKA1GDaAN4g4MDlIObA6gDs4O6g8MD2APpA/GD+gQHhB6AAEAL/+AA8ADgAAJAAABNQkBNQQCFyYSAkABgP6A/r1YYdeEAoj4/oD+gP4G/rCo+QIEAAACAJ0ACANqAtQAKwA9AAAlIS4BJxE+ATchHgEXFQ4BIiY9AS4BJyEOAQcRHgEzITI2NzU0NjIWFxUOASUiLwEmNDYyHwEBNjIWFAcBBgL2/hsxQQICQTEB6y4+AgESGxIBGhP+FRYdAQEdFgHlFh0BEhsSAQJB/qoNCqMKFBkKjQFgChkUCv6KCggBQTEB5jBCAQE+Lx4NEhINHhQZAQEdFf4aFh0dFvkOEhIO+TFBnwqjChoTCY0BYAoUGQr+iQkAAAAABAAeAEoD4gJoAA8AGwAnADAAAAEGBAcmJC8BNzYkNxYEHwElDgEHHgEXPgE3LgEDLgEnPgE3HgEXDgEnDgEUFjI2NCYD0Ar+/sTE/v4LERELAQLExAECChL+Ho3WKirWjY3WKirWjTpNAQFNOjpNAQFNOh8qKj4qKgFEFtUPD9UWFRUX1Q4O1RcVzgeVMjKUCAiUMjKV/qwCTzw8UAEBUDw8T9cBK0ArK0ArAAEAQP+AA9EDgAAJAAAFNgIlFQkBFQQSAvphWP69/oABgAGNhICoAVAG/gGAAYD4C/38AAAIAAD/gARsA4AAHwArAEAATABVAGIAaAB1AAAFIikBLgEnET4BNzMVIyIGHQEhNS4BKwE1Mx4BFxEOARMiKQERFBYzITI2NwEwDwEGDwEjNzEuASc+ATceARcUBycOARQWMj8BNjcuAQUGDwE1NzMRIwEuASc1PgEyFh0BFAYlMjMhFSEHLgE9ATQ2MhYdARQGBAA5/m/+Ni49AQE9LlFRFx8EAAEeF1FRLj0BAT0IQP5A/gAfFwOUFx4B/uUCAgUGhTpiM0UBAUUzNEQBDmscJiY5FAkJAQEm/q0FIylTNDYCAAsPAQEPFw8P/aMi7AEN/eU1DA8PFw8PgAE9LgLXLj0BNh8Xa2sXHzYBPS79KS49AqH9yhcfHxcBIAMDCQjSoAJMOTlMAgJMOSIcjwEuRC4YEBIWIi4VBCAkQ1D+UgKGAQ8LogsQEAuiCw+GNlEBDwuiCxAQC6ILDwADAAL/fgPvA3AAKwBNAGcAAAEjNS4BJyMOAQcVIw4BBxUUFhcDHgE3ITUzFjI3MxYyNzMWNjcRPgE9AS4BAyM1NCYiBh0BIzU0JiIGBxUjNS4BIgYdASMiJicRIREUBhMUBiMhIiYnNT4BMyE1PgE3Mx4BFxUhMhYVA3/fAS8kpyQvAeAvPwEeGgEKYAYBMxUEBwO2AwcEhQZgCRoeAT+DVBAYEIwQGA8BiwEPGBBUJC8BAw4vZyAY/PIXIAEBIBcBGAEvIzgkLwEBFxggAnSoIzABATAjqAE/MDcgMg/+hlEjBAEBAQEBBCNQAXoPMiA3MD/9SN4MEBAM3t4MEBAM398MEBAM3ywoAU/+sScsAhIYICAYNxggqCMwAQEwI6ggGAAABQA3/8ED2gNPABEAIAAzAEQAXwAAASIjISYnJj4BMyEyFxYOASMGAzI7AR4BBwYHIS4BNzYzBSIjJSInJjY3NjMlIR4BFAYHIxUyOwEWFxYGBwYjBS4BNDYzATQmIg8BNTQmIgYdAScmIgYUFzEXFjI/ATE2ApxL0v7jHQgEBxgOAwQhCAQGGBBnZzlQiRcWBwke/LkXFwYIIAIjRs3+7RwJBAYKDQ8BcAFvFBYWFLwuJVQcCQQGCgwP/TcTFhYSAjQVHwotFB8ULQogFAlrCiEKawkB0AEZDBcOGgwXDgEBgAEeFBgBARwUG+YBGQwWBwkBARUiFAHoARgMFwcIAQEUIhX+2g8UCzKpDxQUD6kyCxQdCnYMDHYKAAAFADf/wQPaA00AEQAgADMARABeAAAlIiMhJicmPgE3ITIXFg4BIwYDMjsBHgEHBiMhIiY3NjcFIiMhJicmNjc2NykBMhYUBisBFTIzFxYXFgYHBgchIiY0NjMBMScmIg8BMQYUFjI/ARUUFjI2PQEXFjI2NAKcS9L+4x0IBAcYDgMEIQgEBhgQZ2c5UIkXFgcJHvy5FxcGCCACI0bN/u0cCQQGCg0PAXABbxQWFhS8LiVUHAkEBgoMD/03ExYWEgIrawohCmsJFCAKLRQfFC0KHxVbARkNFw0BGg0WDgEBgAEeFRgdFBoB5gEYDBcHCAEVIhXoAQEYCxcHCAEVIRUCv3cLC3cKHRQMMagPFBQPqDEMFB0AAAAACQCV/4EDawN+AB8ALwA9AE4AWgBrAHcAiACUAAABIzUuAScjLgEiBgcjDgEHFSMiBhURFBYXIT4BNRE0JiUzMjY3PgEyFhceATsBFSEBIREzFR4BMyEyNjc1MwUHJyYiBhQfARYyPwE2
|
|
|
|
|
font-weight: normal;
|
|
|
|
|
font-style: normal;
|
|
|
|
|
font-display: swap;
|
|
|
|
|
}
|
|
|
|
|
.iconfont {
|
|
|
|
|
font-family: "iconfont" !important;
|
|
|
|
|
font-size: 16px;
|
|
|
|
|
font-style: normal;
|
|
|
|
|
-webkit-font-smoothing: antialiased;
|
|
|
|
|
-moz-osx-font-smoothing: grayscale;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-redo:before {
|
|
|
|
|
content: "\e627";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-undo:before {
|
|
|
|
|
content: "\e633";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-indent:before {
|
|
|
|
|
content: "\eb28";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-outdent:before {
|
|
|
|
|
content: "\e6e8";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-fontsize:before {
|
|
|
|
|
content: "\e6fd";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-format-header-1:before {
|
|
|
|
|
content: "\e860";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-format-header-4:before {
|
|
|
|
|
content: "\e863";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-format-header-5:before {
|
|
|
|
|
content: "\e864";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-format-header-6:before {
|
|
|
|
|
content: "\e865";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-clearup:before {
|
|
|
|
|
content: "\e64d";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-preview:before {
|
|
|
|
|
content: "\e631";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-date:before {
|
|
|
|
|
content: "\e63e";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-fontbgcolor:before {
|
|
|
|
|
content: "\e678";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-clearedformat:before {
|
|
|
|
|
content: "\e67e";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-font:before {
|
|
|
|
|
content: "\e684";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-723bianjiqi_duanhouju:before {
|
|
|
|
|
content: "\e65f";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-722bianjiqi_duanqianju:before {
|
|
|
|
|
content: "\e660";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-text_color:before {
|
|
|
|
|
content: "\e72c";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-format-header-2:before {
|
|
|
|
|
content: "\e75c";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-format-header-3:before {
|
|
|
|
|
content: "\e75d";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon--checklist:before {
|
|
|
|
|
content: "\e664";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-baocun:before {
|
|
|
|
|
content: "\ec09";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-line-height:before {
|
|
|
|
|
content: "\e7f8";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-quanping:before {
|
|
|
|
|
content: "\ec13";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-direction-rtl:before {
|
|
|
|
|
content: "\e66e";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-direction-ltr:before {
|
|
|
|
|
content: "\e66d";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-selectall:before {
|
|
|
|
|
content: "\e62b";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-fuzhi:before {
|
|
|
|
|
content: "\ec7a";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-shanchu:before {
|
|
|
|
|
content: "\ec7b";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-bianjisekuai:before {
|
|
|
|
|
content: "\ec7c";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-fengexian:before {
|
|
|
|
|
content: "\ec7f";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-dianzan:before {
|
|
|
|
|
content: "\ec80";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-charulianjie:before {
|
|
|
|
|
content: "\ec81";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-charutupian:before {
|
|
|
|
|
content: "\ec82";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-wuxupailie:before {
|
|
|
|
|
content: "\ec83";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-juzhongduiqi:before {
|
|
|
|
|
content: "\ec84";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-yinyong:before {
|
|
|
|
|
content: "\ec85";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-youxupailie:before {
|
|
|
|
|
content: "\ec86";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-youduiqi:before {
|
|
|
|
|
content: "\ec87";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-zitidaima:before {
|
|
|
|
|
content: "\ec88";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-xiaolian:before {
|
|
|
|
|
content: "\ec89";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-zitijiacu:before {
|
|
|
|
|
content: "\ec8a";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-zitishanchuxian:before {
|
|
|
|
|
content: "\ec8b";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-zitishangbiao:before {
|
|
|
|
|
content: "\ec8c";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-zitibiaoti:before {
|
|
|
|
|
content: "\ec8d";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-zitixiahuaxian:before {
|
|
|
|
|
content: "\ec8e";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-zitixieti:before {
|
|
|
|
|
content: "\ec8f";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-zitiyanse:before {
|
|
|
|
|
content: "\ec90";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-zuoduiqi:before {
|
|
|
|
|
content: "\ec91";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-zitiyulan:before {
|
|
|
|
|
content: "\ec92";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-zitixiabiao:before {
|
|
|
|
|
content: "\ec93";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-zuoyouduiqi:before {
|
|
|
|
|
content: "\ec94";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-duigoux:before {
|
|
|
|
|
content: "\ec9e";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-guanbi:before {
|
|
|
|
|
content: "\eca0";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-shengyin_shiti:before {
|
|
|
|
|
content: "\eca5";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.icon-Character-Spacing:before {
|
|
|
|
|
content: "\e964";
|
|
|
|
|
}
|
|
|
|
|
</style>
|
|
|
|
|
|
|
|
|
|
<style>
|
|
|
|
|
.page-body {
|
|
|
|
|
height: calc(100vh - var(--window-top) - var(--status-bar-height));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.wrapper {
|
|
|
|
|
height: 80%;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.editor-wrapper {
|
|
|
|
|
background: #fff;
|
|
|
|
|
|
|
|
|
|
/* 编辑器高度 - 满屏 */
|
|
|
|
|
/* height: calc(100vh - var(--window-top) - var(--status-bar-height) - 140px); */
|
|
|
|
|
|
|
|
|
|
/* 编辑器高度 - 满屏矮一点 */
|
|
|
|
|
height: calc(80vh - var(--window-top) - var(--status-bar-height) - 240px);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.iconfont {
|
|
|
|
|
display: inline-block;
|
|
|
|
|
padding: 8px 8px;
|
|
|
|
|
width: 24px;
|
|
|
|
|
height: 24px;
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
font-size: 20px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.toolbar {
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
border-bottom: 0;
|
|
|
|
|
font-family: 'Helvetica Neue', 'Helvetica', 'Arial', sans-serif;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.ql-container {
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
padding: 12px 15px;
|
|
|
|
|
width: 100%;
|
|
|
|
|
min-height: 20vh;
|
|
|
|
|
height: 100%;
|
|
|
|
|
/* margin-top: 20px; */
|
|
|
|
|
font-size: 16px;
|
|
|
|
|
line-height: 1.5;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.ql-active {
|
|
|
|
|
color: #06c;
|
|
|
|
|
}
|
|
|
|
|
</style>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<script setup>
|
|
|
|
|
// 基础
|
|
|
|
|
import {
|
|
|
|
|
ref,
|
2026-03-04 15:44:28 +08:00
|
|
|
inject,
|
2026-02-24 10:06:48 +08:00
|
|
|
reactive,
|
|
|
|
|
onMounted,
|
|
|
|
|
computed,
|
|
|
|
|
getCurrentInstance
|
|
|
|
|
} from 'vue'
|
2026-03-04 15:44:28 +08:00
|
|
|
const { $api, navTo, throttle, config } = inject('globalFunction');
|
2026-02-25 15:13:47 +08:00
|
|
|
const props = defineProps({
|
|
|
|
|
content: {
|
|
|
|
|
type: String,
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
})
|
2026-02-24 10:06:48 +08:00
|
|
|
const emit = defineEmits(['init-data'])
|
|
|
|
|
// 页面元素
|
|
|
|
|
const {
|
|
|
|
|
ctx,
|
|
|
|
|
proxy
|
|
|
|
|
} = getCurrentInstance()
|
|
|
|
|
|
|
|
|
|
// 富文本
|
|
|
|
|
const editorCtx = ref(null)
|
|
|
|
|
const formats = reactive({})
|
|
|
|
|
const readOnly = ref(false)
|
|
|
|
|
|
|
|
|
|
// 富文本 内容
|
|
|
|
|
const editorContent = reactive({
|
|
|
|
|
// 带标签内容
|
|
|
|
|
html: '',
|
|
|
|
|
|
|
|
|
|
// 纯文本内容
|
|
|
|
|
text: ''
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function blur(e) {
|
|
|
|
|
// console.log('失去焦点')
|
|
|
|
|
// console.log('更新HTML')
|
|
|
|
|
editorContent.html = e.detail.html
|
|
|
|
|
emit('init-data', {
|
|
|
|
|
value: e.detail.html,
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function readOnlyChange() {
|
|
|
|
|
readOnly.value = !readOnly.value
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function onEditorReady() {
|
|
|
|
|
// #ifdef MP-BAIDU
|
|
|
|
|
editorCtx.value = requireDynamicLib('editorLib').createEditorContext('editor');
|
|
|
|
|
// #endif
|
|
|
|
|
|
|
|
|
|
// #ifdef APP-PLUS || MP-WEIXIN || H5
|
|
|
|
|
uni.createSelectorQuery().in(proxy).select('#editor').context((res) => {
|
|
|
|
|
editorCtx.value = res.context
|
|
|
|
|
// 初始化HTML内容
|
|
|
|
|
editorCtx.value.setContents({//赋值
|
2026-02-25 15:13:47 +08:00
|
|
|
html: props.content?props.content:editorContent.html
|
2026-02-24 10:06:48 +08:00
|
|
|
})
|
|
|
|
|
}).exec()
|
|
|
|
|
// #endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function undo() {
|
|
|
|
|
editorCtx.value.undo()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function redo() {
|
|
|
|
|
editorCtx.value.redo()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function format(e) {
|
|
|
|
|
let {
|
|
|
|
|
name,
|
|
|
|
|
value
|
|
|
|
|
} = e.target.dataset
|
|
|
|
|
if (!name) return
|
|
|
|
|
// console.log('format', name, value)
|
|
|
|
|
editorCtx.value.format(name, value)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function onStatusChange(e) {
|
|
|
|
|
formats.value = e.detail
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function insertDivider() {
|
|
|
|
|
editorCtx.value.insertDivider({
|
|
|
|
|
success: function() {
|
|
|
|
|
console.log('insert divider success')
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function clear() {
|
|
|
|
|
uni.showModal({
|
|
|
|
|
title: '清空编辑器',
|
|
|
|
|
content: '确定清空编辑器全部内容?',
|
|
|
|
|
success: res => {
|
|
|
|
|
if (res.confirm) {
|
|
|
|
|
editorCtx.value.clear({
|
|
|
|
|
success: function(res) {
|
|
|
|
|
console.log("clear success")
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function removeFormat() {
|
|
|
|
|
editorCtx.value.removeFormat()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function insertDate() {
|
|
|
|
|
const date = new Date()
|
|
|
|
|
const formatDate = `${date.getFullYear()}/${date.getMonth() + 1}/${date.getDate()}`
|
|
|
|
|
editorCtx.value.insertText({
|
|
|
|
|
text: formatDate
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function whenInput (e) {
|
|
|
|
|
// 带标签内容
|
|
|
|
|
editorContent.html = e.detail.html
|
|
|
|
|
|
|
|
|
|
// 纯文本内容
|
|
|
|
|
editorContent.text = e.detail.text
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// function clickBtnSubmit () {
|
|
|
|
|
// console.log('>> 点击提交 > 内容')
|
|
|
|
|
// console.log(editorContent.html)
|
|
|
|
|
|
|
|
|
|
// uni.showToast({
|
|
|
|
|
// icon: 'none',
|
|
|
|
|
// title: editorContent.html
|
|
|
|
|
// })
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function insertImage() {
|
|
|
|
|
uni.chooseImage({
|
|
|
|
|
count: 1,
|
|
|
|
|
success: (res) => {
|
|
|
|
|
// 本地路径
|
|
|
|
|
let localPath = res.tempFilePaths[0]
|
|
|
|
|
// 在此可以自定义图片上传
|
|
|
|
|
// 在此可以自定义图片上传
|
|
|
|
|
// 在此可以自定义图片上传
|
2026-03-04 15:44:28 +08:00
|
|
|
$api.uploadFile(localPath, true).then((resData) => {
|
|
|
|
|
resData = JSON.parse(resData);
|
|
|
|
|
// 插入图片
|
|
|
|
|
editorCtx.value.insertImage({
|
|
|
|
|
src: resData.msg,
|
|
|
|
|
alt: '图像',
|
|
|
|
|
success: function() {
|
|
|
|
|
console.log('insert image success')
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
});
|
2026-02-24 10:06:48 +08:00
|
|
|
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
</script>
|
|
|
|
|
|