From 6e413d95d035e6d798f62fde7964287e1d2fa416 Mon Sep 17 00:00:00 2001 From: WXL (wul) <wl_5969728@163.com> Date: 星期四, 18 九月 2025 15:55:45 +0800 Subject: [PATCH] 测试完成 --- src/utils/sipService-cs.js | 6 src/views/knowledge/education/compilequer/index copy.vue | 1321 ++++++++++++++++++++++++++++++++++++++++ src/components/SortCheckbox/index.vue | 165 +++++ src/views/knowledge/education/compilequer/index.vue | 415 ++++------- src/views/patient/propaganda/QuestionnaireTask.vue | 20 5 files changed, 1,665 insertions(+), 262 deletions(-) diff --git a/src/components/SortCheckbox/index.vue b/src/components/SortCheckbox/index.vue new file mode 100644 index 0000000..1a93e31 --- /dev/null +++ b/src/components/SortCheckbox/index.vue @@ -0,0 +1,165 @@ +<template> + <div class="ordered-checkbox-container"> + <!-- 妯悜鎺掑垪鐨勫閫夋缁� --> + <el-checkbox-group + v-model="checkedValues" + class="horizontal-checkbox-group" + > + <el-checkbox + v-for="option in options" + :key="getValue(option)" + :label="getValue(option)" + > + {{ getLabel(option) }} + </el-checkbox> + </el-checkbox-group> + + <!-- 閫変腑椤哄簭灞曠ず鍖哄煙 --> + <div v-if="selectedOrder.length > 0" class="selection-order-display"> + <span class="order-label">鏈嶅姟鎵ц椤哄簭锛�</span> + <span + v-for="(value, index) in selectedOrder" + :key="value" + class="order-item" + > + {{ getSelectedIndex(index) }}.{{ getLabelByValue(value) }} + <span v-if="index < selectedOrder.length - 1">銆�</span> + </span> + </div> + <div v-else class="selection-order-display"> + <span class="order-label">鏆傛棤閫変腑椤�</span> + </div> + </div> +</template> + +<script> +export default { + name: "OrderedCheckboxGroup", + props: { + options: { + type: Array, + default: () => [], + }, + value: { + type: Array, + default: () => [], + }, + valueKey: { + type: String, + default: "value", + }, + labelKey: { + type: String, + default: "label", + }, + }, + data() { + return { + checkedValues: [], + selectedOrder: [], + }; + }, + watch: { + value: { + immediate: true, + handler(newVal) { + if (JSON.stringify(newVal) !== JSON.stringify(this.checkedValues)) { + this.checkedValues = [...newVal]; + this.selectedOrder = [...newVal]; + } + }, + }, + checkedValues(newVal, oldVal) { + const added = newVal.filter((item) => !oldVal.includes(item)); + const removed = oldVal.filter((item) => !newVal.includes(item)); + + added.forEach((value) => { + if (!this.selectedOrder.includes(value)) { + this.selectedOrder.push(value); + } + }); + + removed.forEach((value) => { + const index = this.selectedOrder.indexOf(value); + if (index > -1) { + this.selectedOrder.splice(index, 1); + } + }); + + this.$emit("input", [...newVal]); + this.$emit("change", [...newVal], [...this.selectedOrder]); + }, + }, + methods: { + getValue(option) { + return typeof option === "object" ? option[this.valueKey] : option; + }, + getLabel(option) { + return typeof option === "object" ? option[this.labelKey] : option; + }, + getLabelByValue(value) { + const option = this.options.find( + (opt) => this.getValue(opt) === value + ); + return option ? this.getLabel(option) : value; + }, + getSelectedIndex(index) { + if (index < 20) { + return String.fromCharCode(0x2460 + index); + } else { + return `(${index + 1})`; + } + }, + getSelectionOrder() { + return [...this.selectedOrder]; + }, + setSelectionOrder(orderedValues) { + this.selectedOrder = [...orderedValues]; + this.checkedValues = [...orderedValues]; + }, + }, +}; +</script> + +<style scoped> +.ordered-checkbox-container { + display: flex; + flex-direction: column; + gap: 16px; +} + +.horizontal-checkbox-group { + display: flex; + flex-wrap: wrap; + gap: 20px; +} + +.selection-order-display { + padding: 12px; + background-color: #f5f7fa; + border-radius: 4px; + border: 1px solid #ebeef5; +} + +.order-label { + font-weight: bold; + color: #606266; + margin-right: 8px; +} + +.order-item { + color: #409eff; + font-weight: 500; +} + +/* 鍝嶅簲寮忚璁★細灏忓睆骞曟椂鎹㈣ */ +@media (max-width: 768px) { + .horizontal-checkbox-group { + gap: 12px; + } + + .selection-order-display { + padding: 8px; + } +} +</style> diff --git a/src/utils/sipService-cs.js b/src/utils/sipService-cs.js index 7c63647..80914b9 100644 --- a/src/utils/sipService-cs.js +++ b/src/utils/sipService-cs.js @@ -93,7 +93,7 @@ sessionTimersExpires: 300, extraHeaders: [ "Min-SE: 120", - "Route: <sip:@192.168.100.6>", + "Route: <sip:@192.168.10.124>", "Accept: application/sdp", "Supported: replaces, timer", "Allow: INVITE, ACK, BYE, CANCEL, OPTIONS", @@ -140,7 +140,7 @@ }; this.currentSession = this.ua.call( - `sip:${targetNumber}@192.168.100.6`, + `sip:${targetNumber}@192.168.10.124`, options ); // 鍦ㄤ細璇濆垱寤哄悗淇敼 SDP @@ -151,7 +151,7 @@ .call(pc, offerOptions) .then((offer) => { const modifiedSdp = offer.sdp - .replace(/c=IN IP4 192\.168\.100\.10/g, "c=IN IP4 192.168.100.6") + .replace(/c=IN IP4 192\.168\.100\.10/g, "c=IN IP4 192.168.10.124") .replace(/m=audio \d+ RTP\/AVP.*/, "m=audio 7078 RTP/AVP 0 8"); return new RTCSessionDescription({ type: "offer", diff --git a/src/views/knowledge/education/compilequer/index copy.vue b/src/views/knowledge/education/compilequer/index copy.vue new file mode 100644 index 0000000..59ebeef --- /dev/null +++ b/src/views/knowledge/education/compilequer/index copy.vue @@ -0,0 +1,1321 @@ +<template> + <div class="Questionnairemanagement"> + <!-- 宸︿晶鏍� --> + <div class="sidecolumn"> + <el-steps finish-status="success" :active="Editprogress" simple> + <el-step> + <template slot="title"> + <span style="cursor: pointer" @click="Editprogress = 1" + >鍩虹淇℃伅璁剧疆</span + > + </template> + </el-step> + <el-step> + <template slot="title"> + <span style="cursor: pointer" @click="Editprogress = 2" + >瀹f暀鍐呭</span + > + </template> + </el-step> + </el-steps> + </div> + <!-- 鍙充晶鏁版嵁 --> + <div class="leftvlue"> + <!-- 鍩烘湰淇℃伅 --> + <div v-if="Editprogress == 1"> + <div class="leftvlue-jbxx">鍩烘湰淇℃伅</div> + <el-divider></el-divider> + <el-form + :model="ruleForm" + :rules="rules" + ref="ruleForm" + label-width="100px" + class="demo-ruleForm" + > + <el-form-item label="瀹f暀鍒嗙被" prop="region"> + <el-select + v-model="ruleForm.assortid" + size="medium" + filterable + placeholder="璇烽�夋嫨鍒嗙被" + > + <el-option-group + v-for="group in sortlist" + :key="group.id" + :label="group.assortname" + > + <el-option + v-for="item in group.heLibraryAssortList" + :key="item.id" + :label="item.assortname" + :value="item.id" + > + </el-option> + </el-option-group> + </el-select> + </el-form-item> + <el-row> + <el-col :span="12"> </el-col> + <el-col :span="12"> </el-col> + </el-row> + <el-form-item label="瀹f暀鏍囬" prop="preachname"> + <div style="width: 30%"> + <el-input + v-model="ruleForm.preachname" + placeholder="璇疯緭鍏ユ爣棰�" + ></el-input> + </div> + </el-form-item> + <el-form-item label="瀹f暀鎻忚堪" prop="preachcontent"> + <div style="width: 60%"> + <el-input + type="textarea" + :rows="2" + v-model="ruleForm.preachcontent" + placeholder="璇疯緭鍏ユ弿杩�" + ></el-input> + </div> + </el-form-item> + <el-form-item label="閫氱煡鍙橀噺" prop="name"> + <div style="margin-bottom: 5px" v-for="item in variablelist"> + <el-row> + <el-col :span="5"> + <el-input + v-model="item.variatename" + placeholder="璇疯緭鍏ュ彉閲忓悕" + ></el-input> + </el-col> + <el-col :span="8" :offset="1"> + <el-input + v-model="item.variate" + placeholder="璇疯緭鍏ュ彉閲忓唴瀹�" + ></el-input> + </el-col> + <el-col :span="8" :offset="1"> + <el-button + type="success" + icon="el-icon-plus" + circle + @click="addvariable(item)" + ></el-button> + <el-button + v-if="!item.default" + type="danger" + icon="el-icon-delete" + circle + @click="delvariable(item)" + ></el-button> + </el-col> + </el-row> + </div> + </el-form-item> + + <el-form-item label="鏂囦欢" prop="sickness"> + <div style="width: 40%"> + <el-upload + class="upload-demo" + action="https://jsonplaceholder.typicode.com/posts/" + :on-change="handleChange" + :file-list="fileList" + > + <el-button size="small" type="primary">鐐瑰嚮涓婁紶</el-button> + <div slot="tip" class="el-upload__tip"> + 鍙兘涓婁紶jpg/png/xsl鏂囦欢锛屼笖涓嶈秴杩�50mb + </div> + </el-upload> + </div> + </el-form-item> + <el-form-item label="鏍囩" prop="desc"> + <div class="xinz-inf"> + <el-tag + :key="tag.tagname" + type="success" + v-for="tag in dynamicTags" + closable + :disable-transitions="false" + @close="handleClosetag(tag)" + > + {{ tag.tagname }} + </el-tag> + <el-select + v-model="inputValue" + v-if="inputVisible" + @change="handleInputConfirm" + filterable + remote + allow-create + reserve-keyword + default-first-option + :remote-method="remoteMethodtag" + :loading="loading" + placeholder="璇烽�夋嫨" + > + <el-option + v-for="item in optionstag" + :key="item.tagid" + :label="item.tagname" + :value="item.tagname" + > + </el-option> + </el-select> + <el-button + v-else + class="button-new-tag" + size="small" + @click="showInput" + >+ 鏂板鏍囩</el-button + > + </div> + </el-form-item> + <el-row :gutter="20"> + <el-col :span="6"> + <el-form-item label="鐗堟湰鍙�" prop="name"> + <el-input + v-model="ruleForm.version" + placeholder="榛樿1.0.1" + ></el-input> </el-form-item + ></el-col> + <el-col :span="9"> + <el-form-item label="鍙敤鐘舵��" prop="region"> + <el-radio-group v-model="ruleForm.isAvailable"> + <el-radio + v-for="(item, index) in usable" + :label="item.value" + >{{ item.label }}</el-radio + > + </el-radio-group> + </el-form-item></el-col + > + </el-row> + <el-form-item label="瀹f暀鏂瑰紡" prop="region"> + <el-select + v-model="ruleForm.suitway" + size="medium" + multiple + filterable + placeholder="璇烽�夋嫨鍒嗙被" + > + <el-option + class="ruleFormaa" + v-for="item in mode" + :key="item.label" + :label="item.label" + :value="item.label" + > + </el-option> + </el-select> + </el-form-item> + <el-form-item label="閫傜敤鐤剧梾" prop="region"> + <el-button type="warning" @click="$refs.child.handleAddpatient()" + >娣诲姞鐤剧梾</el-button + > + </el-form-item> + <el-form-item label="閫傜敤闄㈠尯" prop="region"> + <el-select + v-model="ruleForm.campus" + size="medium" + multiple + filterable + placeholder="璇烽�夋嫨鍒嗙被" + > + <el-option + class="ruleFormaa" + v-for="item in courtyardlist" + :key="item.value" + :label="item.label" + :value="item.value" + > + </el-option> + </el-select> + </el-form-item> + <el-form-item label="閫傜敤绉戝" prop="region"> + <el-cascader + v-model="tempDetpRelevanceslist" + :options="deptList" + :props="props" + :show-all-levels="false" + clearable + > + <template slot-scope="{ node, data }"> + <span>{{ data.deptName }}</span> + <span v-if="!node.isLeaf"> ({{ data.children.length }}) </span> + </template> + </el-cascader> + </el-form-item> + <el-form-item> + <el-button type="success" @click="nextstep('ruleForm')" + >涓嬩竴姝�</el-button + > + <el-button type="success" @click="Departmenttreatment('ruleForm')" + >淇濆瓨</el-button + > + <el-button type="info" @click="closeFm('ruleForm')">鍏抽棴</el-button> + </el-form-item> + </el-form> + </div> + <!-- 瀹f暀鍐呭 --> + <div v-if="Editprogress == 2"> + <el-row :gutter="20"> + <el-col :span="4"> + <div class="leftvlue-jbxx">瀹f暀鍐呭</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> + <el-form + :model="ruleForm" + :rules="rules" + ref="ruleForm" + label-width="100px" + class="demo-ruleForm" + > + <!-- <el-row :gutter="20"> + <el-col :span="12"> + <el-form-item label="璧勬枡褰㈠紡" prop="region"> + <el-select + v-model="ruleForm.shape" + placeholder="璇烽�夋嫨鍐呭褰㈠紡" + > + <el-option + v-for="item in xjxsoptions" + :key="item.value" + :label="item.label" + :value="item.value" + > + </el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> --> + + <!-- </el-col> + </el-row> --> + </el-form> + </div> + <!-- <div> + <div id="quillEditorQiniu"> + <el-upload + class="avatar-uploader" + :action="uploadImgUrl" + :accept="'image/*,video/*'" + :show-file-list="false" + :on-success="uploadEditorSuccess" + :on-error="uploadEditorError" + :before-upload="beforeEditorUpload" + :headers="headers" + > + </el-upload> + <quill-editor + class="editor" + v-model="content" + ref="customQuillEditor" + :options="editorOption" + @blur="onEditorBlur" + @focus="onEditorFocus" + @change="onEditorChange" + > + </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> + <!-- 娣诲姞閫傜敤鐤剧梾绐楀彛 --> + <Optional-Form + ref="child" + :dialogVisiblepatient="dialogVisiblepatient" + :overallCase="illnesslist" + @addoption="dialogVisiblepatient = false" + @kkoption="dialogVisiblepatient = true" + /> + </div> +</template> + +<script> +import { quillEditor } from "vue-quill-editor"; +import { Editor, Toolbar } from "@wangeditor/editor-for-vue"; +import axios from "axios"; + +import { + getheLibraryAssort, + delheLibraryAssort, + addheLibraryAssort, + addtargetillness, + getlibrarylist, + dellibraryinfo, + deltargetillness, + compilelibrary, + addrichText, + getlibraryinfo, + getillnesslist, + illnesslistget, + getillness, +} from "@/api/AiCentre/index"; +import OptionalForm from "@/components/OptionalForm"; //姝e垯缁勪欢 + +import { listDept } from "@/api/system/dept"; +// import * as Quill from "quill"; +import Quill from "quill"; +import { listtag } from "@/api/system/label"; +import store from "@/store"; + +// 杩欓噷寮曞叆淇敼杩囩殑video妯″潡骞舵敞鍐� +import Video from "./video"; +Quill.register(Video, true); +//鑾峰彇鐧诲綍token锛屽紩鍏ユ枃浠讹紝濡傛灉鍙槸绠�鍗曟祴璇曪紝娌℃湁涓婁紶鏂囦欢鏄惁鐧诲綍鐨勯檺鍒剁殑璇濓紝 +//杩欎釜token鍙互涓嶇敤鑾峰彇锛屾枃浠跺彲浠ヤ笉寮曞叆锛屾妸涓婇潰瀵瑰簲鐨勪笂浼犳枃浠舵惡甯﹁姹傚ご :headers="headers" 杩欎釜浠g爜鍒犳帀鍗冲彲 +import { getToken } from "@/utils/auth"; +const toolbarOptions = [ + ["bold", "italic", "underline", "strike"], // toggled buttons + ["blockquote", "code-block"], + + [{ header: 1 }, { header: 2 }], // custom button values + [{ list: "ordered" }, { list: "bullet" }], + [{ script: "sub" }, { script: "super" }], // superscript/subscript + [{ indent: "-1" }, { indent: "+1" }], // outdent/indent + [{ direction: "rtl" }], // text direction + + [{ size: ["small", false, "large", "huge"] }], // custom dropdown + [{ header: [1, 2, 3, 4, 5, 6, false] }], + + [{ color: [] }, { background: [] }], // dropdown with defaults from theme + [{ font: [] }], + [{ align: [] }], + ["link", "image", "video"], + ["clean"], // remove formatting button +]; + +export default { + name: "aEducationinfo", + 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(), + }, + uploadImgUrl: process.env.VUE_APP_BASE_API + "/common/uploadSort", + uploadImgUrlword: process.env.VUE_APP_BASE_API + "/common/uploadShow", + uploadUrlPath: "娌℃湁鏂囦欢涓婁紶", + quillUpdateImg: false, + fileList: [ + { + name: "food.jpeg", + url: "https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100", + }, + { + name: "food2.jpeg", + url: "https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100", + }, + ], + content: `<p>娴嬭瘯</p><video class="ql-video" controls="controls" controlslist="nofullscreen" type="video/mp4" style="object-fit:fill;width: 100%;" preload="auto" playsinline="true" x-webkit-airplay="allow" x5-video-orientation="portraint" x5-playsinline="true" x5-video-player-fullscreen="true" src="http://218.108.11.22:8093/profile-api/upload/vadio/钀ュ吇娉垫搷浣滆鑼�.mp4"></video><video class="ql-video" controls="controls" controlslist="nofullscreen" type="video/mp4" style="object-fit:fill;width: 100%;" preload="auto" playsinline="true" x-webkit-airplay="allow" x5-video-orientation="portraint" x5-playsinline="true" x5-video-player-fullscreen="true" src="http://218.108.11.22:8093/profile-api/upload/vadio/娉ㄥ皠鍣ㄦ帹娉�.mp4"></video><p>321</p>"`, //鏈�缁堜繚瀛樼殑鍐呭 + fileName: "", //鏂囦欢鍚� + dynamicTags: [], + inputVisible: false, + illnessVisible: false, + dialogVisiblepatient: false, //閫傜敤鐤剧梾绐楀彛 + inputValue: "", + // 瀵屾枃鏈� + editorOption: { + placeholder: "浣犳兂璇翠粈涔堬紵", + modules: { + imageResize: { + displayStyles: { + backgroundColor: "black", + border: "none", + color: "white", + }, + modules: ["Resize", "DisplaySize", "Toolbar"], + }, + toolbar: { + container: toolbarOptions, // 宸ュ叿鏍� + handlers: { + image: function (value) { + if (value) { + document + .querySelector("#quillEditorQiniu .avatar-uploader input") + .click(); + } else { + this.quill.format("image", false); + } + }, + video: function (value) { + if (value) { + document + .querySelector("#quillEditorQiniu .avatar-uploader input") + .click(); + } else { + this.quill.format("video", false); + } + }, + }, + }, + }, + }, + + sidecolumnrabs: "left", //鏂瑰悜 + Editprogress: 1, //缂栬緫杩涘害 + currentVersion: "1.2.3", //褰撳墠鐗堟湰 + loading: false, // 閬僵灞� + drawer: false, //鎺у埗灞曞紑 + radio: "false", //鍗曢�夐閫変腑 + radios: [], //澶氶�夐閫変腑 + radioas: "", //濉┖棰樼瓟妗� + // 鎬绘潯鏁� + total: 1, + hetype: "", + id: null, + ruleForm: { + campus: [], + heLibraryTagList: [], + tempDetpRelevances: [], + version: "1.0.1", + }, + rules: {}, + rulesa: {}, + mode: [], + editableTabs: [], + sortlist: [], + usable: [], + courtyardlist: [], + precedencetype: [], + optionsillness: [], + illnesslistapi: [], + illnesslist: [], + options: [], + optionstag: [], + deptList: [], + tempDetpRelevanceslist: [], + props: { multiple: true, value: "deptId", label: "deptName" }, + // 鍐呯綉鐨勯儴鍒嗭紙鏂囦欢锛� + oldPattern: "http://192.168.191.181:8095/profile/upload", + // 鍐呯綉鐨勯儴鍒嗭紙鏂囦欢锛� + oldPatternhtml: "/http:\/\/192\.168\.191\.181:8095\/profile\/upload\//g", + // 澶栫綉閮ㄥ垎锛堟枃浠讹級 + newPattern: "http://218.108.11.22:8093/profile-api/upload", + + xjxsoptions: [ + { + value: "1", + label: "鍥炬枃", + }, + { + value: "2", + label: "瑙嗛", + }, + { + value: "3", + label: "闊抽", + }, + ], + valssu: [ + { + idd: 1, + wssd: "浣犳渶杩戞�庝箞鏍�", + sdadd: ["sss", "ssccss", "ssaas", "ss"], + }, + ], + addvalue: "娣诲姞棰樼洰", + + variablelist: [ + { variatename: "濮撳悕", variate: "${name}", default: 1 }, + { variatename: "鐢佃瘽", variate: "${phone}", default: 1 }, + { variatename: "鐥呮儏", variate: "${illness}", default: 1 }, + ], + // 鏌ヨ鍙傛暟 + queryParams: { + pageNum: 1, + pageSize: 10, + }, + }; + }, + activated() { + if (this.id != this.$route.query.id) { + this.gettabList(); + this.getList(); + this.illnessUpdate(); + } + }, + + created() { + this.gettabList(); + this.getList(); + this.illnessUpdate(); + this.mode = store.getters.mode; + this.editableTabs = store.getters.editableTabs; + this.usable = store.getters.usable; + this.precedencetype = store.getters.precedencetype; + this.courtyardlist = store.getters.courtyardlist; + }, + watch: { + content(newVal, oldVal) { + //this.$emit('input', newVal); + console.log(newVal, "A"); + 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 }; + }, + // 鑾峰彇椤甸潰鏁版嵁 + getList() { + this.loading = true; + this.id = this.$route.query.id; + this.hetype = this.$route.query.hetype; + if (this.id) { + getlibraryinfo({ id: this.id }).then((res) => { + this.ruleForm = res.data[0]; + if (this.ruleForm.campus) + this.ruleForm.campus = this.ruleForm.campus.split(","); + this.dynamicTags = res.data[0].heLibraryTagList.map( + this.processElement + ); + if (this.ruleForm.htmlRichText) { + this.Getmissioncontent(this.ruleForm.htmlRichText); + } + if (this.ruleForm.deptNames) { + this.tempDetpRelevanceslist = JSON.parse(this.ruleForm.deptNames); + } + if (this.ruleForm.suitway) { + this.ruleForm.suitway = this.ruleForm.suitway.split(","); + } + this.variablelist = this.ruleForm.otherdata + ? JSON.parse(this.ruleForm.otherdata) + : this.variablelist; + }); + } + // 瀹f暀鍒嗙被 + getheLibraryAssort({ hetype: 1 }).then((res) => { + this.sortlist = res.rows; + console.log(this.sortlist); + }); + // 閮ㄩ棬 + listDept(this.queryParams).then((response) => { + this.deptList = this.handleTree(response.data, "deptId"); + }); + + // ------------------ + + // let html = + // '<p>娴嬭瘯</p><video class="ql-video" controls="controls" controlslist="nofullscreen" type="video/mp4" style="object-fit:fill;width: 100%;" preload="auto" playsinline="true" x-webkit-airplay="allow" x5-video-orientation="portraint" x5-playsinline="true" x5-video-player-fullscreen="true" src="http://192.168.191.181:8095/profile/upload/vadio/钀ュ吇娉典粙缁�.mp4"></video><p>娴嬭瘯111</p><video class="ql-video" controls="controls" controlslist="nofullscreen" type="video/mp4" style="object-fit:fill;width: 100%;" preload="auto" playsinline="true" x-webkit-airplay="allow" x5-video-orientation="portraint" x5-playsinline="true" x5-video-player-fullscreen="true" src="http://192.168.191.181:8095/profile/upload/vadio/娉ㄥ皠鍣ㄦ帹娉�.mp4"></video><p><br></p>'; + // // html = html.parserdom(this.oldPattern, this.newPattern); + // html = this.parserdom(html); + // console.log(html, "html"); + + // this.loading = false; + }, + // parser + parserdom(html) { + // 鍒涘缓涓�涓柊鐨凞OM瑙f瀽鍣� + var parser = new DOMParser(); + // 灏嗗瓧绗︿覆瑙f瀽涓烘枃妗e璞� + var doc = parser.parseFromString(html, "text/html"); + + // 瀹氫箟瑕佹浛鎹㈢殑鏂版棫URL + var oldUrlBase = "http://192.168.191.181:8095/profile/upload"; + var newUrlBase = "http://218.108.11.22:8093/profile-api/upload"; + + // 鑾峰彇鎵�鏈夌殑video鍏冪礌 + var videos = doc.querySelectorAll("video"); + + // 閬嶅巻鎵�鏈夌殑video鍏冪礌骞舵浛鎹rc灞炴�� + videos.forEach(function (video) { + var src = video.getAttribute("src"); + if (src.startsWith(oldUrlBase)) { + video.setAttribute("src", src.replace(oldUrlBase, newUrlBase)); + } + }); + + // 灏嗕慨鏀瑰悗鐨勬枃妗h浆鎹㈠洖瀛楃涓� + var newContent = doc.body.innerHTML; + return newContent; + }, + submitForm(formName) { + let tgs = []; + this.dynamicTags.forEach((item) => { + tgs.push(item.tagname); + }); + if (this.ruleForm.campus) { + this.ruleForm.campus = this.ruleForm.campus.join(","); + } + this.ruleForm.labelInfo = tgs.length != 0 ? tgs.join(", ") : ""; + this.ruleForm.otherdata = JSON.stringify(this.variablelist); + this.ruleForm.hetype = 1; + console.log(22); + this.ruleForm.suitway = + this.ruleForm.suitway.length != 0 + ? this.ruleForm.suitway.join(",") + : ""; + + addrichText({ + content: this.parserdom(this.content), + fileName: this.generateRandomHtmlFilename(), + }).then((res) => { + this.ruleForm.richText = res.msg; + console.log(this.ruleForm.richText, "this.ruleForm.richText"); + // 澶勭悊鍐呯綉html + addrichText({ + content: this.content, + fileName: this.generateRandomHtmlFilename(), + }).then((resf) => { + this.ruleForm.htmlRichText = resf.msg.replace( + this.newPattern, + this.oldPattern + ); + console.log(this.ruleForm.htmlRichText, "this.ruleForm.htmlRichText"); + + if (this.id) { + this.ruleForm.isoperation = 2; + compilelibrary(this.ruleForm).then((res) => { + if (res.code == 200) { + this.$modal.msgSuccess("缂栬緫鎴愬姛"); + this.confirmillness(); + this.$router.go(-1); + } + }); + } else { + this.ruleForm.isoperation = 1; + compilelibrary(this.ruleForm).then((res) => { + if (res.code == 200) { + this.$modal.msgSuccess("鏂板鎴愬姛"); + this.confirmillness(res.data); + this.$router.go(-1); + } + }); + } + }); + }); + }, + + generateRandomHtmlFilename() { + // 鐢熸垚涓�涓�0鍒�1涔嬮棿鐨勯殢鏈烘暟锛屽苟灏嗗叾杞崲涓哄瓧绗︿覆 + let randomNumber = Math.random().toString(); + // 绉婚櫎鍓嶉潰鐨�0鍜屽皬鏁扮偣 + randomNumber = randomNumber.substring(6); + // 纭繚鐢熸垚鐨勯殢鏈烘暟鏄竴瀹氶暱搴︾殑锛屼緥濡�8浣� + while (randomNumber.length < 8) { + randomNumber = "0" + randomNumber; + } + // 鎷兼帴涓�.html鍚庣紑 + return randomNumber + ".html"; + }, + + // 淇濆瓨鐤剧梾 + confirmillness(guid) { + this.illnesslist.forEach((item, index) => { + if (guid) { + item.outid = guid; + } else { + console.log(this.ruleForm); + item.outid = this.ruleForm.id; + } + item.icd10name = item.icdname; + item.icd10code = item.icdcode; + item.type = 6; + if (!item.id) { + addtargetillness(item).then((res) => {}); + } + }); + this.illnessVisible = false; + this.$modal.msgSuccess("缂栬緫鎴愬姛"); + }, + getFileNameFromPath(path) { + const parts = path.split("/"); + return parts[parts.length - 1]; + }, + // 涓嬩竴姝� + nextstep() { + if (this.Editprogress <= 1) { + return this.Editprogress++; + } + }, + // 涓婁竴姝� + laststep() { + this.Editprogress = this.Editprogress - 1; + }, + // 鍏抽棴 + closeFm() { + this.$confirm("閫�鍑轰笉浼氫繚鐣欓〉闈㈠唴瀹规洿鏀�, 鏄惁缁х画?", "鎻愮ず", { + confirmButtonText: "纭畾", + cancelButtonText: "鍙栨秷", + type: "warning", + }) + .then(() => { + this.$router.go(-1); + }) + .catch(() => { + this.$message({ + type: "info", + message: "宸插彇娑�", + }); + }); + }, + // 绉戝澶勭悊 + Departmenttreatment() { + this.ruleForm.deptNames = JSON.stringify(this.tempDetpRelevanceslist); + const result = this.tempDetpRelevanceslist.map( + (subArr) => subArr[subArr.length - 1] + ); + // id鏁扮粍鏌ユ暟缁勫璞� + result.forEach((item) => { + const condition = this.ruleForm.tempDetpRelevances.some( + (obj) => obj.deptId === item + ); + if (!condition) { + listDept({ deptId: item }).then((res) => { + console.log("dept"); + res.data[0].type = 2; + this.ruleForm.tempDetpRelevances.push(res.data[0]); + }); + } + }); + // 鏁扮粍瀵硅薄鏌d鏁扮粍 + this.ruleForm.tempDetpRelevances.forEach((item) => { + const condition = result.some((obj) => obj === item.deptId); + if (!condition) { + const index = this.ruleForm.tempDetpRelevances.indexOf(item); + this.ruleForm.tempDetpRelevances[index].delFlag = 1; + } + }); + setTimeout(() => { + this.submitForm(); + }, 1000); + // this.submitForm(); + }, + // 淇濆瓨棰樼洰淇℃伅 + Saveproblem() {}, + /** 鏌ヨ棰樼洰鍒楄〃 */ + + // 鏂板鍙橀噺 + addvariable() { + this.variablelist.push({ + variatename: "", + variate: "", + }); + }, + // 鍒犻櫎鍙橀噺 + delvariable(item) { + const index = this.variablelist.indexOf(item); + if (index !== -1) { + this.variablelist.splice(index, 1); // 浠庣储寮曚綅缃垹闄や竴涓厓绱� + } else { + console.log("鏈壘鍒拌瀵硅薄"); + } + }, + // 鎺у埗鏂囦欢 + handleChange(file, fileList) { + this.fileList = fileList.slice(-3); + }, + // 鏍囩----------------- + gettabList() { + const tagqueryParams = { + pageNum: 1, + pageSize: 1000, + tagcategoryid: "0", + }; + listtag(tagqueryParams).then((response) => { + this.optionstag = response.rows; + }); + }, + handleClosetag(tag) { + console.log(tag); + const lindex = this.ruleForm.heLibraryTagList.findIndex( + (item) => item.tagname == tag.tagname + ); + console.log(lindex); + this.dynamicTags.splice(this.dynamicTags.indexOf(tag), 1); + this.ruleForm.heLibraryTagList[lindex].isoperation = 3; + }, + handleInputConfirm() { + let tagvalue = {}; + let tagname = this.inputValue; + if (tagname) { + listtag({ + pageNum: 1, + pageSize: 1000, + tagcategoryid: "0", + tagname: tagname, + }).then((res) => { + if (res.rows[0]) { + tagvalue = res.rows[0]; + tagvalue.isoperation = 1; + } else { + tagvalue = { + tagname: tagname, + isoperation: 1, + }; + } + this.ruleForm.heLibraryTagList.push(tagvalue); + this.dynamicTags.push(tagvalue); + }); + } + this.inputVisible = false; + this.inputValue = ""; + }, + remoteMethodtag(query) { + if (query !== "") { + this.loading = true; + setTimeout(() => { + this.loading = false; + listtag({ tagname: query, tagcategoryid: "0" }).then((res) => { + this.optionstag = res.rows; + }); + }, 200); + } else { + this.optionstag = []; + } + }, + showInput() { + this.inputVisible = true; + }, + // 鐤剧梾----------------------- + illnessUpdate() { + if (this.id) { + getillness({ outid: this.$route.query.id, type: 6 }).then((res) => { + this.illnesslist = res.rows; + this.illnesslist.forEach((item) => { + item.icdname = item.icd10name; + }); + }); + } + }, + + // -------------------------- + + // 棰勮妯℃澘 + PreviewTemplate() { + this.drawer = true; + }, + resetForm(formName) { + this.$refs[formName].resetFields(); + }, + + //涓婁紶鍥剧墖涔嬪墠async + beforeEditorUpload(res, file) { + //鏄剧ず涓婁紶鍔ㄧ敾 + this.quillUpdateImg = true; + // const res1 = await uploadImage() + // console.log(res1,'====='); + // this.$emit('before',res, file) + console.log(res); + console.log(file); + }, + // 涓婁紶鍥剧墖鎴愬姛 + uploadEditorSuccess(res, file) { + console.log("涓婁紶鎴愬姛"); + //鎷兼帴鍑轰笂浼犵殑鍥剧墖鍦ㄦ湇鍔″櫒鐨勫畬鏁村湴鍧� + let imgUrl = res.url; + console.log(res.url); + + imgUrl = imgUrl.replace(this.newPattern, this.oldPattern); + console.log(imgUrl, "imgUrl"); + + let type = imgUrl.substring(imgUrl.lastIndexOf(".") + 1); + this.fileName = this.getFileNameFromPath(res.url); + + // 鑾峰彇瀵屾枃鏈粍浠跺疄渚� + let quill = this.$refs.customQuillEditor.quill; + // 鑾峰彇鍏夋爣鎵�鍦ㄤ綅缃� + let length = quill.getSelection().index; + // 鎻掑叆鍥剧墖||瑙嗛 res.info涓烘湇鍔″櫒杩斿洖鐨勫浘鐗囧湴鍧� + if (type == "mp4" || type == "MP4" || type == "avi" || type == "AVI") { + window.jsValue = imgUrl; + quill.insertEmbed(length, "video", imgUrl); + } else { + quill.insertEmbed(length, "image", imgUrl); + } + // 璋冩暣鍏夋爣鍒版渶鍚� + quill.setSelection(length + 1); + //鍙栨秷涓婁紶鍔ㄧ敾 + this.quillUpdateImg = false; + }, + // 澶卞幓鐒︾偣浜嬩欢 + onEditorBlur(e) { + console.log("onEditorBlur: ", e); + }, + // 鑾峰緱鐒︾偣浜嬩欢 + onEditorFocus(e) { + console.log("onEditorFocus: ", e); + }, + // 鍐呭鏀瑰彉浜嬩欢 + onEditorChange(e) { + console.log("onEditorChange: ", e); + }, + // 涓婁紶(鏂囦欢)鍥剧墖澶辫触 + uploadEditorError(res, file) { + console.log(res, "word"); + console.log(file, "word"); + //椤甸潰鎻愮ず + this.$message.error("涓婁紶鍥剧墖澶辫触"); + //鍙栨秷涓婁紶鍔ㄧ敾 + this.quillUpdateImg = false; + }, + //涓婁紶缁勪欢杩斿洖鐨勭粨鏋� + uploadResult: function (res) { + this.uploadUrlPath = res; + }, + // 涓婁紶(鏂囦欢)鍥剧墖澶辫触 + uploadEditorErrorword(res, file) { + console.log(res); + console.log(file); + //椤甸潰鎻愮ず + this.$message.error("涓婁紶鍥剧墖澶辫触"); + //鍙栨秷涓婁紶鍔ㄧ敾 + this.quillUpdateImg = false; + }, + //涓婁紶鍥剧墖涔嬪墠async + beforeEditorUploadword(res, file) { + //鏄剧ず涓婁紶鍔ㄧ敾 + this.quillUpdateImg = true; + // const res1 = await uploadImage() + // console.log(res1,'====='); + // this.$emit('before',res, file) + console.log(res); + console.log(file); + }, + // 涓婁紶word鎴愬姛 + uploadEditorSuccessword(res, file) { + console.log("涓婁紶word鏂囦欢鎴愬姛"); + console.log(res, file, "word"); + let fileurl = res.url.replace(this.newPattern, this.oldPattern); + axios + .get(fileurl) + .then((response) => { + console.log(response.data, "鏁版嵁"); // 杈撳嚭鑾峰彇鍒扮殑鏂囦欢鍐呭 + this.$nextTick(() => { + this.content = response.data; + }); + this.fileName = this.getFileNameFromPath(response.url); + console.log(this.fileName, "this.fileName"); + }) + .catch((error) => { + console.error("Failed to fetch file:", error); + }); + }, + Getmissioncontent(url) { + axios + .get(url) + .then((response) => { + console.log(response.data, "鏁版嵁"); // 杈撳嚭鑾峰彇鍒扮殑鏂囦欢鍐呭 + this.content = response.data; + this.fileName = this.getFileNameFromPath(response.url); + console.log(this.fileName, "this.fileName"); + }) + .catch((error) => { + console.error("Failed to fetch file:", error); + }); + }, + // 澶勭悊url + }, +}; +</script> +<style src="@wangeditor/editor/dist/css/style.css"></style> +<style src="@/assets/styles/global.css"></style> +<style lang="scss" scoped> +.sidecolumn { + // width: 300px; + // min-height: 100vh; + // text-align: center; + // display: flex; + // margin-top: 20px; + margin: 20px; + margin-bottom: 0; + padding: 20px; + background: #edf1f7; + border: 1px solid #dcdfe6; + -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), + 0 0 6px 0 rgba(0, 0, 0, 0.04); +} + +.leftvlue { + // display: flex; + // flex: 1; + margin: 20px; + padding: 30px; + background: #ffff; + border: 1px solid #dcdfe6; + -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), + 0 0 6px 0 rgba(0, 0, 0, 0.04); + + .mulsz { + font-size: 20px; + } + + .leftvlue-jbxx { + font-size: 24px; + height: 30px; + border-left: 3px solid #41a1be; + padding-left: 3px; + + span { + position: absolute; + right: 80px; + } + } + + .demo-cascader { + margin-right: 20px; + } + + .PreviewTemplate { + color: #02a7f0; + cursor: pointer; + font-size: 20px; + margin: 0 20px; + } +} + +.xinz-inf { + font-size: 18px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + + line-height: 48px; + + .el-tag + .el-tag { + margin-left: 10px; + } + + .button-new-tag { + margin-left: 10px; + height: 32px; + line-height: 30px; + padding-top: 0; + padding-bottom: 0; + } + + .input-new-tag { + width: 90px; + margin-left: 10px; + vertical-align: bottom; + } +} + +.preview-left { + margin: 20px; + // margin: 20px; + padding: 30px; + background: #ffff; + border: 1px solid #dcdfe6; + -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), + 0 0 6px 0 rgba(0, 0, 0, 0.04); + + .topic-dev { + margin-bottom: 25px; + font-size: 20px !important; + + .dev-text { + margin-bottom: 10px; + } + } +} + +.addtopic { + margin-top: 30px; +} + +.presentation { + margin: 20px 0; + display: flex; + + .presentation-left { + width: 50%; + height: 500px; + + .button-textxg { + color: #024df0; + } + + .button-textsc { + color: #f52727; + } + } + + .presentation-right { + width: 50%; + height: 500px; + padding: 20px; + font-size: 18px; + border: 1px solid #909091; + + span { + padding: 0 35px; + margin-right: 10px; + border-bottom: 1px solid #909091; + } + + .headline { + font-size: 20px; + border-left: 3px solid #41a1be; + padding-left: 5px; + margin: 15px 0; + } + } +} + +::v-deep .addtopic-input { + input { + background: #02a7f0; + color: #edf1f7; + width: 150px; + } +} + +::v-deep.el-step.is-vertical .el-step__title { + font-size: 25px; +} + +::v-deep.el-input--medium { + font-size: 18px !important; +} + +::v-deep.ruleFormaa.el-select { + display: inline-block; + position: relative; + width: 700px; +} + +.el-select__tags { + font-size: 20px; + max-width: 888px !important; +} + +::v-deep.el-radio__inner { + width: 22px; + height: 22px; +} + +// ::v-deep.topic-dev.el-radio__label { +// font-size: 24px; +// } +::v-deep.el-radio-group { + span { + font-size: 24px; + } +} + +::v-deep.el-checkbox-group { + span { + font-size: 24px; + } +} +</style> diff --git a/src/views/knowledge/education/compilequer/index.vue b/src/views/knowledge/education/compilequer/index.vue index 59ebeef..7d0db6e 100644 --- a/src/views/knowledge/education/compilequer/index.vue +++ b/src/views/knowledge/education/compilequer/index.vue @@ -253,7 +253,7 @@ </el-form-item> </el-form> </div> - <!-- 瀹f暀鍐呭 --> + <!-- 瀹f暀鍐呭 --> <div v-if="Editprogress == 2"> <el-row :gutter="20"> <el-col :span="4"> @@ -273,86 +273,27 @@ </el-col> </el-row> - <div> - <el-form - :model="ruleForm" - :rules="rules" - ref="ruleForm" - label-width="100px" - class="demo-ruleForm" - > - <!-- <el-row :gutter="20"> - <el-col :span="12"> - <el-form-item label="璧勬枡褰㈠紡" prop="region"> - <el-select - v-model="ruleForm.shape" - placeholder="璇烽�夋嫨鍐呭褰㈠紡" - > - <el-option - v-for="item in xjxsoptions" - :key="item.value" - :label="item.label" - :value="item.value" - > - </el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :span="12"> --> - - <!-- </el-col> - </el-row> --> - </el-form> - </div> - <!-- <div> - <div id="quillEditorQiniu"> - <el-upload - class="avatar-uploader" - :action="uploadImgUrl" - :accept="'image/*,video/*'" - :show-file-list="false" - :on-success="uploadEditorSuccess" - :on-error="uploadEditorError" - :before-upload="beforeEditorUpload" - :headers="headers" - > - </el-upload> - <quill-editor - class="editor" - v-model="content" - ref="customQuillEditor" - :options="editorOption" - @blur="onEditorBlur" - @focus="onEditorFocus" - @change="onEditorChange" - > - </quill-editor> - </div> - </div> --> - <!-- 鏂扮粍浠� --> + <!-- WangEditor 瀵屾枃鏈紪杈戝櫒 --> <div style="border: 1px solid #ccc; margin: 10px"> <Toolbar style="border-bottom: 1px solid #ccc" - :editor="editor" + :editor="editorRef" :defaultConfig="toolbarConfig" - :mode="modes" + :mode="mode" /> <Editor - style="height: 500px; overflow-y: hidden" - v-model="content" + style="height: 800px; overflow-y: hidden" + v-model:html="content" :defaultConfig="editorConfig" - :mode="modes" - @onCreated="onCreated" + :mode="mode" + @onCreated="handleEditorCreated" /> </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="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> @@ -369,201 +310,141 @@ </template> <script> -import { quillEditor } from "vue-quill-editor"; import { Editor, Toolbar } from "@wangeditor/editor-for-vue"; +import '@wangeditor/editor/dist/css/style.css'; import axios from "axios"; +import { getToken } from "@/utils/auth"; import { getheLibraryAssort, - delheLibraryAssort, - addheLibraryAssort, addtargetillness, - getlibrarylist, - dellibraryinfo, - deltargetillness, compilelibrary, addrichText, getlibraryinfo, getillnesslist, - illnesslistget, - getillness, } from "@/api/AiCentre/index"; -import OptionalForm from "@/components/OptionalForm"; //姝e垯缁勪欢 - +import OptionalForm from "@/components/OptionalForm"; import { listDept } from "@/api/system/dept"; -// import * as Quill from "quill"; -import Quill from "quill"; import { listtag } from "@/api/system/label"; import store from "@/store"; - -// 杩欓噷寮曞叆淇敼杩囩殑video妯″潡骞舵敞鍐� -import Video from "./video"; -Quill.register(Video, true); -//鑾峰彇鐧诲綍token锛屽紩鍏ユ枃浠讹紝濡傛灉鍙槸绠�鍗曟祴璇曪紝娌℃湁涓婁紶鏂囦欢鏄惁鐧诲綍鐨勯檺鍒剁殑璇濓紝 -//杩欎釜token鍙互涓嶇敤鑾峰彇锛屾枃浠跺彲浠ヤ笉寮曞叆锛屾妸涓婇潰瀵瑰簲鐨勪笂浼犳枃浠舵惡甯﹁姹傚ご :headers="headers" 杩欎釜浠g爜鍒犳帀鍗冲彲 -import { getToken } from "@/utils/auth"; -const toolbarOptions = [ - ["bold", "italic", "underline", "strike"], // toggled buttons - ["blockquote", "code-block"], - - [{ header: 1 }, { header: 2 }], // custom button values - [{ list: "ordered" }, { list: "bullet" }], - [{ script: "sub" }, { script: "super" }], // superscript/subscript - [{ indent: "-1" }, { indent: "+1" }], // outdent/indent - [{ direction: "rtl" }], // text direction - - [{ size: ["small", false, "large", "huge"] }], // custom dropdown - [{ header: [1, 2, 3, 4, 5, 6, false] }], - - [{ color: [] }, { background: [] }], // dropdown with defaults from theme - [{ font: [] }], - [{ align: [] }], - ["link", "image", "video"], - ["clean"], // remove formatting button -]; export default { name: "aEducationinfo", components: { OptionalForm, Editor, Toolbar }, data() { return { - editor: null, - content: "<p>hello</p>", - toolbarConfig: {}, + // 缂栬緫鍣ㄥ疄渚� + editorRef: null, + + // 缂栬緫鍣ㄥ唴瀹� + content: "<p>娴嬭瘯</p>", + + // 缂栬緫鍣ㄦā寮� + mode: "default", + + // 宸ュ叿鏍忛厤缃� + toolbarConfig: { + excludeKeys: [ + "group-video", + "insertVideo", + "uploadVideo", + "emotion", + "codeBlock", + ] + }, + + // 缂栬緫鍣ㄩ厤缃� 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; + placeholder: "璇疯緭鍏ュ鏁欏唴瀹�...", + MENU_CONF: { + uploadImage: { + server: process.env.VUE_APP_BASE_API + "/common/uploadSort", + fieldName: "file", + maxFileSize: 2 * 1024 * 1024, + maxNumberOfFiles: 1, + allowedFileTypes: ["image/*"], + headers: { + Authorization: "Bearer " + getToken() + }, + customUpload: async (file, insertFn) => { + try { 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, { + const response = await axios.post( + process.env.VUE_APP_BASE_API + "/common/uploadSort", + 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(); - }, - }, - }, + "Content-Type": "multipart/form-data", + Authorization: "Bearer " + getToken() + } + } + ); + + if (response.data && response.data.url) { + let imgUrl = response.data.url; + imgUrl = imgUrl.replace( + "http://218.108.11.22:8093/profile-api/upload", + "http://192.168.191.181:8095/profile/upload" + ); + insertFn(imgUrl); + } + } catch (error) { + console.error("鍥剧墖涓婁紶澶辫触", error); + this.$message.error("鍥剧墖涓婁紶澶辫触"); + } + } + } + } }, - modes: "default", // or 'simple' + // 涓婁紶閰嶇疆 headers: { - Authorization: "Bearer " + getToken(), + Authorization: "Bearer " + getToken() }, - uploadImgUrl: process.env.VUE_APP_BASE_API + "/common/uploadSort", uploadImgUrlword: process.env.VUE_APP_BASE_API + "/common/uploadShow", - uploadUrlPath: "娌℃湁鏂囦欢涓婁紶", - quillUpdateImg: false, - fileList: [ - { - name: "food.jpeg", - url: "https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100", - }, - { - name: "food2.jpeg", - url: "https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100", - }, - ], - content: `<p>娴嬭瘯</p><video class="ql-video" controls="controls" controlslist="nofullscreen" type="video/mp4" style="object-fit:fill;width: 100%;" preload="auto" playsinline="true" x-webkit-airplay="allow" x5-video-orientation="portraint" x5-playsinline="true" x5-video-player-fullscreen="true" src="http://218.108.11.22:8093/profile-api/upload/vadio/钀ュ吇娉垫搷浣滆鑼�.mp4"></video><video class="ql-video" controls="controls" controlslist="nofullscreen" type="video/mp4" style="object-fit:fill;width: 100%;" preload="auto" playsinline="true" x-webkit-airplay="allow" x5-video-orientation="portraint" x5-playsinline="true" x5-video-player-fullscreen="true" src="http://218.108.11.22:8093/profile-api/upload/vadio/娉ㄥ皠鍣ㄦ帹娉�.mp4"></video><p>321</p>"`, //鏈�缁堜繚瀛樼殑鍐呭 - fileName: "", //鏂囦欢鍚� + + // 椤甸潰鐘舵�� + Editprogress: 1, + loading: false, + + // 琛ㄥ崟鏁版嵁 + ruleForm: { + campus: [], + heLibraryTagList: [], + tempDetpRelevances: [], + version: "1.0.1", + preachname: "", + preachcontent: "", + isAvailable: "", + suitway: [] + }, + + // 鍏朵粬鏁版嵁 dynamicTags: [], + sortlist: [], + courtyardlist: [], + illnesslist: [], + deptList: [], + tempDetpRelevanceslist: [], + variablelist: [ + { variatename: "濮撳悕", variate: "${name}", default: 1 }, + { variatename: "鐢佃瘽", variate: "${phone}", default: 1 }, + { variatename: "鐥呮儏", variate: "${illness}", default: 1 } + ], + + props: { + multiple: true, + value: "deptId", + label: "deptName" + }, + fileName: "", //鏂囦欢鍚� inputVisible: false, illnessVisible: false, dialogVisiblepatient: false, //閫傜敤鐤剧梾绐楀彛 inputValue: "", - // 瀵屾枃鏈� - editorOption: { - placeholder: "浣犳兂璇翠粈涔堬紵", - modules: { - imageResize: { - displayStyles: { - backgroundColor: "black", - border: "none", - color: "white", - }, - modules: ["Resize", "DisplaySize", "Toolbar"], - }, - toolbar: { - container: toolbarOptions, // 宸ュ叿鏍� - handlers: { - image: function (value) { - if (value) { - document - .querySelector("#quillEditorQiniu .avatar-uploader input") - .click(); - } else { - this.quill.format("image", false); - } - }, - video: function (value) { - if (value) { - document - .querySelector("#quillEditorQiniu .avatar-uploader input") - .click(); - } else { - this.quill.format("video", false); - } - }, - }, - }, - }, - }, - sidecolumnrabs: "left", //鏂瑰悜 - Editprogress: 1, //缂栬緫杩涘害 currentVersion: "1.2.3", //褰撳墠鐗堟湰 - loading: false, // 閬僵灞� drawer: false, //鎺у埗灞曞紑 radio: "false", //鍗曢�夐閫変腑 radios: [], //澶氶�夐閫変腑 @@ -572,28 +453,16 @@ total: 1, hetype: "", id: null, - ruleForm: { - campus: [], - heLibraryTagList: [], - tempDetpRelevances: [], - version: "1.0.1", - }, rules: {}, rulesa: {}, mode: [], editableTabs: [], - sortlist: [], usable: [], - courtyardlist: [], precedencetype: [], optionsillness: [], illnesslistapi: [], - illnesslist: [], options: [], optionstag: [], - deptList: [], - tempDetpRelevanceslist: [], - props: { multiple: true, value: "deptId", label: "deptName" }, // 鍐呯綉鐨勯儴鍒嗭紙鏂囦欢锛� oldPattern: "http://192.168.191.181:8095/profile/upload", // 鍐呯綉鐨勯儴鍒嗭紙鏂囦欢锛� @@ -624,11 +493,7 @@ ], addvalue: "娣诲姞棰樼洰", - variablelist: [ - { variatename: "濮撳悕", variate: "${name}", default: 1 }, - { variatename: "鐢佃瘽", variate: "${phone}", default: 1 }, - { variatename: "鐥呮儏", variate: "${illness}", default: 1 }, - ], + // 鏌ヨ鍙傛暟 queryParams: { pageNum: 1, @@ -655,11 +520,15 @@ this.courtyardlist = store.getters.courtyardlist; }, watch: { - content(newVal, oldVal) { - //this.$emit('input', newVal); - console.log(newVal, "A"); - console.log(oldVal, "B"); - }, + // content(newVal, oldVal) { + // //this.$emit('input', newVal); + // console.log(newVal, "A"); + // console.log(oldVal, "B"); + // }, + content(newVal) { + // 鍐呭鍙樺寲鏃惰Е鍙戯紝鍙互鍦ㄨ繖閲屽鐞嗚嚜鍔ㄤ繚瀛樼瓑閫昏緫 + this.$emit('content-change', newVal) + } }, beforeDestroy() { const editor = this.editor; @@ -670,7 +539,24 @@ onCreated(editor) { this.editor = Object.seal(editor); // 涓�瀹氳鐢� Object.seal()锛屽惁鍒欎細鎶ラ敊 }, + // 缂栬緫鍣ㄥ垱寤哄洖璋� + handleEditorCreated(editor) { + this.editorRef = editor; + console.log("缂栬緫鍣ㄥ凡鍒涘缓", editor); + }, + // 閿�姣佺紪杈戝櫒 + destroyEditor() { + if (this.editorRef) { + this.editorRef.destroy(); + this.editorRef = null; + } + }, + + // 鑾峰彇鍐呭HTML + getEditorContent() { + return this.content; + }, // --------------------------------- processElement(element) { return { ...element, isoperation: null }; @@ -1110,25 +996,40 @@ console.error("Failed to fetch file:", error); }); }, + // Getmissioncontent(url) { + // axios + // .get(url) + // .then((response) => { + // console.log(response.data, "鏁版嵁"); // 杈撳嚭鑾峰彇鍒扮殑鏂囦欢鍐呭 + // this.content = response.data; + // this.fileName = this.getFileNameFromPath(response.url); + // console.log(this.fileName, "this.fileName"); + // }) + // .catch((error) => { + // console.error("Failed to fetch file:", error); + // }); + // }, + // 鑾峰彇杩滅▼鍐呭 Getmissioncontent(url) { - axios - .get(url) + axios.get(url) .then((response) => { - console.log(response.data, "鏁版嵁"); // 杈撳嚭鑾峰彇鍒扮殑鏂囦欢鍐呭 this.content = response.data; - this.fileName = this.getFileNameFromPath(response.url); - console.log(this.fileName, "this.fileName"); }) .catch((error) => { - console.error("Failed to fetch file:", error); + console.error("鑾峰彇鍐呭澶辫触:", error); }); }, // 澶勭悊url + }, + // 鐢熷懡鍛ㄦ湡閽╁瓙 + beforeUnmount() { + this.destroyEditor() }, }; </script> <style src="@wangeditor/editor/dist/css/style.css"></style> <style src="@/assets/styles/global.css"></style> +<style src="@wangeditor/editor/dist/css/style.css"></style> <style lang="scss" scoped> .sidecolumn { // width: 300px; diff --git a/src/views/patient/propaganda/QuestionnaireTask.vue b/src/views/patient/propaganda/QuestionnaireTask.vue index 9f5f112..84afbd6 100644 --- a/src/views/patient/propaganda/QuestionnaireTask.vue +++ b/src/views/patient/propaganda/QuestionnaireTask.vue @@ -80,6 +80,15 @@ > </el-radio-group> </el-form-item> + <!-- <el-form-item label="鏈嶅姟褰㈠紡"> + <SortCheckbox + v-model="checkList" + :options="checkboxlist" + value-key="value" + label-key="label" + @change="checkSelectionChange" + /> + </el-form-item> --> <el-form-item label="鎵ц鍛ㄦ湡" prop="longTask"> <el-radio-group v-model="form.longTask"> <el-radio :label="0">鑷畾涔夊懆鏈�</el-radio> @@ -916,6 +925,7 @@ } from "@/api/AiCentre/index"; import OptionalForm from "@/components/OptionalForm"; //鐤剧梾娣诲姞缁勪欢 import SFtable from "@/components/SFtable"; //琛ㄦ牸缁勪欢 +import SortCheckbox from "@/components/SortCheckbox"; //琛ㄦ牸缁勪欢 import { MessageBox } from "element-ui"; export default { @@ -1028,7 +1038,8 @@ pageNum: 1, // pageSize: 10, }, - checkList: "", + checkList: '', + selectedOrder: [], deliverytopqueryParams: { pageNum: 1, // pageSize: 10, @@ -1195,7 +1206,7 @@ serviceType: null, }; }, - components: { SFtable, OptionalForm }, + components: { SFtable, OptionalForm, SortCheckbox }, created() { this.appraiselist = store.getters.appraiselist; @@ -1568,6 +1579,11 @@ } }); }, + checkSelectionChange(selectedValues, selectedOrder) { + this.selectedOrder = selectedOrder; + console.log("褰撳墠閫変腑:", selectedValues); + console.log("閫変腑椤哄簭:", selectedOrder); + }, getillness(id) { if (id) { getillness({ outid: id, type: 5 }).then((res) => { -- Gitblit v1.9.3