| | |
| | | <!-- 基本信息 --> |
| | | <div v-if="Editprogress == 1"> |
| | | <div class="leftvlue-jbxx">基本信息</div> |
| | | <el-divider></el-divider> |
| | | <el-form |
| | | :model="ruleForm" |
| | | :rules="rules" |
| | |
| | | <el-col :span="4"> |
| | | <div class="leftvlue-jbxx">宣教内容</div> |
| | | </el-col> |
| | | <el-col :offset="16" :span="4"> |
| | | <el-upload |
| | | class="upload-demo" |
| | | :action="uploadImgUrlword" |
| | | :on-success="uploadEditorSuccessword" |
| | | :on-error="uploadEditorErrorword" |
| | | :before-upload="beforeEditorUploadword" |
| | | :headers="headers" |
| | | > |
| | | <el-button size="small" type="primary">word文件上传</el-button> |
| | | </el-upload> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <div> |
| | |
| | | label-width="100px" |
| | | class="demo-ruleForm" |
| | | > |
| | | <el-row :gutter="20"> |
| | | <!-- <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="资料形式" prop="region"> |
| | | <el-select |
| | |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <div> |
| | | <el-button @click="laststep('ruleForm')">上一步</el-button> |
| | | <el-button |
| | | type="success" |
| | | @click="Departmenttreatment('ruleForm')" |
| | | >保存</el-button |
| | | > |
| | | <el-button |
| | | type="warning" |
| | | @click="Departmenttreatment('ruleForm')" |
| | | >另存新版本</el-button |
| | | > |
| | | <el-button type="info" @click="closeFm('ruleForm')" |
| | | >关闭</el-button |
| | | > |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <el-col :span="12"> --> |
| | | |
| | | <!-- </el-col> |
| | | </el-row> --> |
| | | </el-form> |
| | | </div> |
| | | <div> |
| | | <el-upload |
| | | class="upload-demo" |
| | | :action="uploadImgUrlword" |
| | | :on-success="uploadEditorSuccessword" |
| | | :on-error="uploadEditorErrorword" |
| | | :before-upload="beforeEditorUploadword" |
| | | :headers="headers" |
| | | > |
| | | <el-button size="small" type="primary">word文件上传</el-button> |
| | | </el-upload> |
| | | <!-- <div> |
| | | <div id="quillEditorQiniu"> |
| | | <!-- 基于elementUi的上传组件 el-upload begin--> |
| | | <el-upload |
| | | class="avatar-uploader" |
| | | :action="uploadImgUrl" |
| | |
| | | :headers="headers" |
| | | > |
| | | </el-upload> |
| | | <!-- 基于elementUi的上传组件 el-upload end--> |
| | | <quill-editor |
| | | class="editor" |
| | | v-model="content" |
| | |
| | | > |
| | | </quill-editor> |
| | | </div> |
| | | </div> --> |
| | | <!-- 新组件 --> |
| | | <div style="border: 1px solid #ccc; margin: 10px"> |
| | | <Toolbar |
| | | style="border-bottom: 1px solid #ccc" |
| | | :editor="editor" |
| | | :defaultConfig="toolbarConfig" |
| | | :mode="modes" |
| | | /> |
| | | <Editor |
| | | style="height: 500px; overflow-y: hidden" |
| | | v-model="content" |
| | | :defaultConfig="editorConfig" |
| | | :mode="modes" |
| | | @onCreated="onCreated" |
| | | /> |
| | | </div> |
| | | <div> |
| | | <el-button @click="laststep('ruleForm')">上一步</el-button> |
| | | <el-button type="success" @click="Departmenttreatment('ruleForm')" |
| | | >保存</el-button |
| | | > |
| | | <el-button type="warning" @click="Departmenttreatment('ruleForm')" |
| | | >另存新版本</el-button |
| | | > |
| | | <el-button type="info" @click="closeFm('ruleForm')">关闭</el-button> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | |
| | | <script> |
| | | import { quillEditor } from "vue-quill-editor"; |
| | | import { Editor, Toolbar } from "@wangeditor/editor-for-vue"; |
| | | import axios from "axios"; |
| | | |
| | | import { |
| | |
| | | |
| | | export default { |
| | | name: "aEducationinfo", |
| | | components: { OptionalForm }, |
| | | components: { OptionalForm, Editor, Toolbar }, |
| | | data() { |
| | | return { |
| | | editor: null, |
| | | content: "<p>hello</p>", |
| | | toolbarConfig: {}, |
| | | editorConfig: { |
| | | placeholder: "请输入内容...", |
| | | menus: [ |
| | | "head", |
| | | "bold", |
| | | "italic", |
| | | "underline", |
| | | "image", |
| | | "link", |
| | | "list", |
| | | "undo", |
| | | "redo", |
| | | "file", // 添加自定义文件上传菜单 |
| | | ], |
| | | uploadImgServer: process.env.VUE_APP_BASE_API + "/common/uploadSort", // 图片上传接口 |
| | | uploadImgHeaders: { |
| | | Authorization: "Bearer " + getToken(), |
| | | }, // 自定义上传的 headers |
| | | uploadImgParams: { key: "value" }, // 自定义上传的参数 |
| | | uploadImgMaxSize: 2 * 1024 * 1024, // 图片最大大小,单位 Byte |
| | | uploadImgMaxLength: 1, // 一次最多上传图片数量 |
| | | uploadImgTimeout: 3 * 60 * 1000, // 超时时间,单位 ms |
| | | uploadImgHooks: { |
| | | customInsert: (insertImgFn, result) => { |
| | | const url = result.url; // 获取图片地址 |
| | | insertImgFn(url); // 插入图片 |
| | | }, |
| | | }, |
| | | customMenus: { |
| | | file: { |
| | | tip: "上传文件", |
| | | click: (editor) => { |
| | | const input = document.createElement("input"); |
| | | input.type = "file"; |
| | | input.accept = |
| | | "application/pdf,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document"; // 支持的文件类型 |
| | | input.onchange = (e) => { |
| | | const file = e.target.files[0]; |
| | | if (!file) return; |
| | | const formData = new FormData(); |
| | | formData.append("file", file); |
| | | |
| | | // 确保 process.env.VUE_APP_BASE_API 是正确的 |
| | | const uploadUrl = |
| | | process.env.VUE_APP_BASE_API + "/common/uploadSort"; |
| | | axios |
| | | .post(uploadUrl, formData, { |
| | | headers: { |
| | | Authorization: "Bearer " + getToken(), |
| | | }, |
| | | }) |
| | | .then((res) => { |
| | | const url = res.data.url; // 获取文件地址 |
| | | // 插入文件链接作为普通文本 |
| | | editor.txt.append(url + " "); |
| | | // 或者插入文件链接作为超链接 |
| | | // editor.cmd.do('insertLink', { name: '文件链接', url: url }); |
| | | }) |
| | | .catch((err) => { |
| | | console.error("文件上传失败", err); |
| | | }); |
| | | }; |
| | | input.click(); |
| | | }, |
| | | }, |
| | | }, |
| | | }, |
| | | modes: "default", // or 'simple' |
| | | headers: { |
| | | Authorization: "Bearer " + getToken(), |
| | | }, |
| | |
| | | console.log(oldVal, "B"); |
| | | }, |
| | | }, |
| | | |
| | | beforeDestroy() { |
| | | const editor = this.editor; |
| | | if (editor == null) return; |
| | | editor.destroy(); // 组件销毁时,及时销毁编辑器 |
| | | }, |
| | | methods: { |
| | | onCreated(editor) { |
| | | this.editor = Object.seal(editor); // 一定要用 Object.seal(),否则会报错 |
| | | }, |
| | | |
| | | // --------------------------------- |
| | | processElement(element) { |
| | | return { ...element, isoperation: null }; |
| | | }, |
| | |
| | | // 获取光标所在位置 |
| | | let length = quill.getSelection().index; |
| | | // 插入图片||视频 res.info为服务器返回的图片地址 |
| | | if (type == "mp4" || type == "MP4"|| type == "avi"|| type == "AVI") { |
| | | if (type == "mp4" || type == "MP4" || type == "avi" || type == "AVI") { |
| | | window.jsValue = imgUrl; |
| | | quill.insertEmbed(length, "video", imgUrl); |
| | | } else { |
| | |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | | <style src="@wangeditor/editor/dist/css/style.css"></style> |
| | | <style src="@/assets/styles/global.css"></style> |
| | | <style lang="scss" scoped> |
| | | .Questionnairemanagement { |
| | | // display: flex; |
| | | } |
| | | |
| | | .sidecolumn { |
| | | // width: 300px; |
| | | // min-height: 100vh; |
| | |
| | | } |
| | | |
| | | .leftvlue-jbxx { |
| | | margin-bottom: 50px; |
| | | font-size: 20px; |
| | | font-size: 24px; |
| | | height: 30px; |
| | | border-left: 3px solid #41a1be; |
| | | padding-left: 3px; |
| | | |
| | | span { |
| | | position: absolute; |
| | |
| | | span { |
| | | font-size: 24px; |
| | | } |
| | | } |
| | | |
| | | .editor { |
| | | line-height: normal !important; |
| | | height: 600px; |
| | | margin-bottom: 80px; |
| | | } |
| | | |
| | | .ql-snow .ql-tooltip[data-mode="link"]::before { |
| | | content: "请输入链接地址:"; |
| | | } |
| | | |
| | | .ql-snow .ql-tooltip.ql-editing a.ql-action::after { |
| | | border-right: 0px; |
| | | content: "保存"; |
| | | padding-right: 0px; |
| | | } |
| | | |
| | | .ql-snow .ql-tooltip[data-mode="video"]::before { |
| | | content: "请输入视频地址:"; |
| | | } |
| | | |
| | | .ql-snow .ql-picker.ql-size .ql-picker-label::before, |
| | | .ql-snow .ql-picker.ql-size .ql-picker-item::before { |
| | | content: "14px"; |
| | | } |
| | | |
| | | .ql-snow .ql-picker.ql-size .ql-picker-label[data-value="small"]::before, |
| | | .ql-snow .ql-picker.ql-size .ql-picker-item[data-value="small"]::before { |
| | | content: "10px"; |
| | | } |
| | | |
| | | .ql-snow .ql-picker.ql-size .ql-picker-label[data-value="large"]::before, |
| | | .ql-snow .ql-picker.ql-size .ql-picker-item[data-value="large"]::before { |
| | | content: "18px"; |
| | | } |
| | | |
| | | .ql-snow .ql-picker.ql-size .ql-picker-label[data-value="huge"]::before, |
| | | .ql-snow .ql-picker.ql-size .ql-picker-item[data-value="huge"]::before { |
| | | content: "32px"; |
| | | } |
| | | |
| | | .ql-snow .ql-picker.ql-header .ql-picker-label::before, |
| | | .ql-snow .ql-picker.ql-header .ql-picker-item::before { |
| | | content: "文本"; |
| | | } |
| | | |
| | | .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="1"]::before, |
| | | .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]::before { |
| | | content: "标题1"; |
| | | } |
| | | |
| | | .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="2"]::before, |
| | | .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]::before { |
| | | content: "标题2"; |
| | | } |
| | | |
| | | .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="3"]::before, |
| | | .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]::before { |
| | | content: "标题3"; |
| | | } |
| | | |
| | | .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="4"]::before, |
| | | .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]::before { |
| | | content: "标题4"; |
| | | } |
| | | |
| | | .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="5"]::before, |
| | | .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]::before { |
| | | content: "标题5"; |
| | | } |
| | | |
| | | .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="6"]::before, |
| | | .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]::before { |
| | | content: "标题6"; |
| | | } |
| | | |
| | | .ql-snow .ql-picker.ql-font .ql-picker-label::before, |
| | | .ql-snow .ql-picker.ql-font .ql-picker-item::before { |
| | | content: "标准字体"; |
| | | } |
| | | |
| | | .ql-snow .ql-picker.ql-font .ql-picker-label[data-value="serif"]::before, |
| | | .ql-snow .ql-picker.ql-font .ql-picker-item[data-value="serif"]::before { |
| | | content: "衬线字体"; |
| | | } |
| | | |
| | | .ql-snow .ql-picker.ql-font .ql-picker-label[data-value="monospace"]::before, |
| | | .ql-snow .ql-picker.ql-font .ql-picker-item[data-value="monospace"]::before { |
| | | content: "等宽字体"; |
| | | } |
| | | </style> |