This commit is contained in:
2024-07-17 16:10:42 +08:00
parent fefb3e7f53
commit 9f224e0631
3 changed files with 334 additions and 566 deletions

View File

@ -1,19 +1,22 @@
<template>
<div>
<el-upload
:action="uploadUrl"
:before-upload="handleBeforeUpload"
:on-success="handleUploadSuccess"
:on-error="handleUploadError"
name="file"
:show-file-list="false"
:headers="headers"
style="display: none"
ref="upload"
v-if="this.type == 'url'"
>
<el-upload :action="uploadUrl" :before-upload="handleBeforeUpload" :on-success="handleUploadSuccess"
:on-error="handleUploadError" name="file" :show-file-list="false" :headers="headers" style="display: none"
ref="upload" v-if="this.type == 'url'">
</el-upload>
<div class="editor" ref="editor" :style="styles"></div>
<el-dialog title="视频" :visible.sync="dialogFormVisible" style="text-align: center;" append-to-body>
<el-upload class="upload-demo" drag :action="videouploadUrl" multiple :headers="headers" :data="videotype"
v-if="dialogFormVisible" :before-upload="onBeforeUploadVideo" :on-success="onSuccessVideo"
:on-error="onErrorVideo">
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
<div class="el-upload__tip" slot="tip">只能上传MP4文件且不超过10M</div>
</el-upload>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible = false"> </el-button>
</div>
</el-dialog>
</div>
</template>
@ -23,7 +26,8 @@ import "quill/dist/quill.core.css";
import "quill/dist/quill.snow.css";
import "quill/dist/quill.bubble.css";
import { getToken } from "@/utils/auth";
import Video from "@/utils/quillVideo";
Quill.register(Video, true);
export default {
name: "Editor",
props: {
@ -60,30 +64,45 @@ export default {
},
data() {
return {
videotype: {
type: 'commonVideoUrl'
},
uploadUrl: process.env.VUE_APP_BASE_API + "/common/upload", //
videouploadUrl: process.env.VUE_APP_BASE_API + "/manage/file/uploadFile", //
headers: {
Authorization: "Bearer " + getToken()
},
Quill: null,
getindex: 0,
currentValue: "",
dialogFormVisible: false,
options: {
theme: "snow",
bounds: document.body,
debug: "warn",
modules: {
//
toolbar: [
["bold", "italic", "underline", "strike"], // 线 线
["blockquote", "code-block"], //
[{ list: "ordered" }, { list: "bullet" }], //
[{ indent: "-1" }, { indent: "+1" }], //
[{ size: ["small", false, "large", "huge"] }], //
[{ header: [1, 2, 3, 4, 5, 6, false] }], //
[{ color: [] }, { background: [] }], //
[{ align: [] }], //
["clean"], //
["link", "image", "video"] //
],
toolbar: {
container: [
["bold", "italic", "underline", "strike"], // 线 线
["blockquote", "code-block"], //
[{ list: "ordered" }, { list: "bullet" }], //
[{ indent: "-1" }, { indent: "+1" }], //
[{ size: ["small", false, "large", "huge"] }], //
[{ header: [1, 2, 3, 4, 5, 6, false] }], //
[{ color: [] }, { background: [] }], //
[{ align: [] }], //
["clean"], //
["link", "image", "video"] //
],
handlers: {
//
video: () => {
this.getindex = this.Quill.getSelection().index
this.dialogFormVisible = true;
},
},
},
},
placeholder: "请输入内容",
readOnly: this.readOnly,
@ -186,21 +205,63 @@ export default {
handleUploadError() {
this.$message.error("图片插入失败");
},
// el-
onBeforeUploadVideo(file) {
let acceptArr = ["video/mp4"];
const isVideo = acceptArr.includes(file.type);
const isLt1M = file.size / 1024 / 1024 < 30;
if (!isVideo) {
this.$message.error("只能上传mp4格式文件!");
}
if (!isLt1M) {
this.$message.error(`上传文件大小不能超过 30MB!`);
}
return isLt1M && isVideo;
},
//
onSuccessVideo(res) {
if (res.code === 200) {
this.insertVideoLink(process.env.VUE_APP_BASE_API + res.imgUrl);
} else {
this.$message.error(res.msg);
}
},
//
onErrorVideo() {
this.$message.error("上传失败");
},
//
insertVideoLink(videoLink) {
if (!videoLink) return this.$message.error("视频地址不能为空!");
this.dialogFormVisible = false;
//
let range = this.getindex;
// range null
let index = range ? range : 0;
//
this.Quill.insertEmbed(index, "video", { url: videoLink, poster: 'https://7up.pics/images/2024/01/23/101sh.png' });
//
this.Quill.setSelection(index + 1);
},
},
};
</script>
<style>
.editor, .ql-toolbar {
.editor,
.ql-toolbar {
white-space: pre-wrap !important;
line-height: normal !important;
}
.quill-img {
display: none;
}
.ql-snow .ql-tooltip[data-mode="link"]::before {
content: "请输入链接地址:";
}
.ql-snow .ql-tooltip.ql-editing a.ql-action::after {
border-right: 0px;
content: "保存";
@ -215,14 +276,17 @@ export default {
.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";
@ -232,26 +296,32 @@ export default {
.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";
@ -261,10 +331,12 @@ export default {
.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: "等宽字体";

72
src/utils/quillVideo.js Normal file
View File

@ -0,0 +1,72 @@
// 这是 utils/quillVideo
import Quill from "quill";
// 源码中是import直接倒入这里要用Quill.import引入
const BlockEmbed = Quill.import("blots/block/embed");
const Link = Quill.import("formats/link");
const ATTRIBUTES = ["height", "width"];
class Video extends BlockEmbed {
static create(value) {
const node = super.create();
// 添加video标签所需的属性
node.setAttribute('style', 'object-fit:fill;width: 30%;')
node.setAttribute('preload', 'auto') // auto - 当页面加载后载入整个视频 meta - 当页面加载后只载入元数据 none - 当页面加载后不载入视频
// node.setAttribute('playsinline', 'true')
// node.setAttribute('x-webkit-airplay', 'allow')
// node.setAttribute('x5-video-player-type', 'h5') // 启用H5播放器,是wechat安卓版特性
// node.setAttribute('x5-video-orientation', 'portraint') // 竖屏播放 声明了h5才能使用 播放器支付的方向landscape横屏portraint竖屏默认值为竖屏
// node.setAttribute('x5-playsinline', 'true') // 兼容安卓 不全屏播放
node.setAttribute('x5-video-player-fullscreen', 'true') // 全屏设置,设置为 true 是防止横屏
node.setAttribute('controlsList', 'nofullscreen') // 控制删除
node.setAttribute("poster", value.poster); // 视频封面
node.setAttribute("controls", "controls");
node.setAttribute("type", "video/mp4");
node.setAttribute("src", this.sanitize(value.url));
return node;
}
static formats(domNode) {
return ATTRIBUTES.reduce((formats, attribute) => {
if (domNode.hasAttribute(attribute)) {
formats[attribute] = domNode.getAttribute(attribute);
}
return formats;
}, {});
}
static sanitize(url) {
return Link.sanitize(url);
}
static value(domNode) {
return {
url: domNode.getAttribute("src"),
poster: domNode.getAttribute('poster'),
}
}
format(name, value) {
if (ATTRIBUTES.indexOf(name) > -1) {
if (value) {
this.domNode.setAttribute(name, value);
} else {
this.domNode.removeAttribute(name);
}
} else {
super.format(name, value);
}
}
html() {
const { video } = this.value();
return `<a href="${video}">${video}</a>`;
}
}
Video.blotName = "video"; // 这里不用改楼主不用iframe直接替换掉原来如果需要也可以保留原来的这里用个新的blot
Video.className = "ql-video";
Video.tagName = "video"; // 用video标签替换iframe
export default Video;

View File

@ -2,55 +2,25 @@
<div class="app-container" ref="layout">
<el-row :gutter="20">
<el-col :span="5">
<DepartmentList
ref="DepartmentList"
@clickdepartment="clickdepartment"
:methods="'selectNumByDept'"
>
<DepartmentList ref="DepartmentList" @clickdepartment="clickdepartment" :methods="'selectNumByDept'">
</DepartmentList>
</el-col>
<el-col :span="19" :xs="24">
<div ref="topform" class="form">
<el-form
:model="queryParams"
ref="queryForm"
size="small"
:inline="true"
v-show="showSearch"
label-width="68px"
>
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"
label-width="68px">
<el-form-item label="创建时间" prop="">
<el-date-picker
v-model="queryParams.createTimeStart"
type="date"
value-format="yyyy-MM-dd"
placeholder="选择日期"
@change="changecreateTimeStart"
:picker-options="pickerStartTime"
>
<el-date-picker v-model="queryParams.createTimeStart" type="date" value-format="yyyy-MM-dd"
placeholder="选择日期" @change="changecreateTimeStart" :picker-options="pickerStartTime">
</el-date-picker>
-
<el-date-picker
v-model="queryParams.createTimeEnd"
type="date"
value-format="yyyy-MM-dd"
placeholder="选择日期"
@change="changecreateTimeEnd"
:picker-options="pickerEndTime"
>
<el-date-picker v-model="queryParams.createTimeEnd" type="date" value-format="yyyy-MM-dd"
placeholder="选择日期" @change="changecreateTimeEnd" :picker-options="pickerEndTime">
</el-date-picker>
</el-form-item>
<el-form-item label="宣教类型" prop="propagandaType">
<el-select
v-model="queryParams.propagandaType"
placeholder="请选择"
>
<el-option
v-for="item in optionstype"
:key="item.value"
:label="item.label"
:value="item.value"
>
<el-select v-model="queryParams.propagandaType" placeholder="请选择">
<el-option v-for="item in optionstype" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</el-form-item>
@ -62,16 +32,8 @@
</el-select>
</el-form-item> -->
<el-form-item label="宣教状态" prop="propagandaStatus">
<el-select
v-model="queryParams.propagandaStatus"
placeholder="请选择"
>
<el-option
v-for="item in optionsstate"
:key="item.value"
:label="item.label"
:value="item.value"
>
<el-select v-model="queryParams.propagandaStatus" placeholder="请选择">
<el-option v-for="item in optionsstate" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
<!-- <el-input
@ -82,191 +44,92 @@
/> -->
</el-form-item>
<el-form-item>
<el-button
type="primary"
icon="el-icon-search"
size="mini"
@click="handleQuery"
>搜索</el-button
>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
>重置</el-button
>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
</div>
<div ref="mb8" class="mb8">
<el-row :gutter="10" class="">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
:disabled="queryParams.hospitalAgencyId ? false : true"
v-hasPermi="['manage:propaganda:add']"
>新增</el-button
>
<el-button
type="warning"
plain
icon="el-icon-upload2"
size="mini"
@click="handleUpload"
>导入</el-button
>
v-hasPermi="['manage:propaganda:add']">新增</el-button>
<el-button type="warning" plain icon="el-icon-upload2" size="mini" @click="handleUpload">导入</el-button>
</el-col>
<right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
></right-toolbar>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
</div>
<div ref="table">
<el-table
:max-height="maxTableHeight"
v-loading="loading"
:data="propagandaList"
@selection-change="handleSelectionChange"
>
<el-table :max-height="maxTableHeight" v-loading="loading" :data="propagandaList"
@selection-change="handleSelectionChange">
<!-- <el-table-column type="selection" width="55" align="center" /> -->
<el-table-column
label="序号"
align="center"
prop="id"
type="index"
/>
<el-table-column
label="宣教名称"
align="center"
prop="propagandaTitle"
:show-overflow-tooltip="true"
>
<el-table-column label="序号" align="center" prop="id" type="index" />
<el-table-column label="宣教名称" align="center" prop="propagandaTitle" :show-overflow-tooltip="true">
</el-table-column>
<el-table-column
label="宣教类型"
align="center"
prop="propagandaType"
>
<el-table-column label="宣教类型" align="center" prop="propagandaType">
<template slot-scope="scope">
{{
scope.row.propagandaType == "MEDICATION_KNOWLEDGE"
? "用药知识"
: ""
}}
scope.row.propagandaType == "MEDICATION_KNOWLEDGE"
? "用药知识"
: ""
}}
{{
scope.row.propagandaType == "DISEASE_POPULARIZATION"
? "疾病科普"
: ""
}}
scope.row.propagandaType == "DISEASE_POPULARIZATION"
? "疾病科普"
: ""
}}
{{
scope.row.propagandaType == "SPORT_NUTRITION"
? "运动营养"
: ""
}}
scope.row.propagandaType == "SPORT_NUTRITION"
? "运动营养"
: ""
}}
{{
scope.row.propagandaType == "OTHER_KNOWLEDGE"
? "其他知识"
: ""
}}
scope.row.propagandaType == "OTHER_KNOWLEDGE"
? "其他知识"
: ""
}}
{{
scope.row.propagandaType == "CUSTOMIZED_CONTENT"
? "定制内容"
: ""
}}
scope.row.propagandaType == "CUSTOMIZED_CONTENT"
? "定制内容"
: ""
}}
</template>
</el-table-column>
<el-table-column
label="宣教ID"
align="center"
prop="propagandaCode"
:show-overflow-tooltip="true"
/>
<el-table-column
label="宣教状态"
align="center"
prop="propagandaStatus"
>
<el-table-column label="宣教ID" align="center" prop="propagandaCode" :show-overflow-tooltip="true" />
<el-table-column label="宣教状态" align="center" prop="propagandaStatus">
<template slot-scope="scope">
{{
scope.row.propagandaStatus == "CREATE_PROCESS" ? "创作中" : ""
}}
scope.row.propagandaStatus == "CREATE_PROCESS" ? "创作中" : ""
}}
{{
scope.row.propagandaStatus == "CREATE_COMPLETE"
? "创作完成"
: ""
}}
scope.row.propagandaStatus == "CREATE_COMPLETE"
? "创作完成"
: ""
}}
{{ scope.row.propagandaStatus == "IN_REVIEW" ? "审核中" : "" }}
{{ scope.row.propagandaStatus == "APPROVED" ? "审核通过" : "" }}
{{
scope.row.propagandaStatus == "REVIEW_FAILED"
? "审核不通过"
: ""
}}
scope.row.propagandaStatus == "REVIEW_FAILED"
? "审核不通过"
: ""
}}
<div></div>
</template>
</el-table-column>
<el-table-column
label="宣教来源"
align="center"
prop="hospitalAgencyName"
/>
<el-table-column
label="创建时间"
align="center"
prop="createTime"
/>
<el-table-column
label="更新时间"
align="center"
prop="updateTime"
/>
<el-table-column
label="操作"
align="center"
class-name="small-padding fixed-width"
width="300%"
>
<el-table-column label="宣教来源" align="center" prop="hospitalAgencyName" />
<el-table-column label="创建时间" align="center" prop="createTime" />
<el-table-column label="更新时间" align="center" prop="updateTime" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="300%">
<template slot-scope="scope">
<el-button
type="text"
icon="el-icon-zoom-in"
size="mini"
@click="Preview(scope.row)"
>预览</el-button
>
<el-button
type="text"
icon="el-icon-tickets"
size="mini"
@click="copyUrl(scope.row)"
>复制</el-button
>
<el-button
size="mini"
type="text"
icon="el-icon-aim"
v-if="scope.row.propagandaStatus == 'CREATE_COMPLETE'"
@click="examine(scope.row)"
>审核</el-button
>
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['manage:propaganda:edit']"
>修改</el-button
>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['manage:propaganda:remove']"
>删除</el-button
>
<el-button type="text" icon="el-icon-zoom-in" size="mini" @click="Preview(scope.row)">预览</el-button>
<el-button type="text" icon="el-icon-tickets" size="mini" @click="copyUrl(scope.row)">复制</el-button>
<el-button size="mini" type="text" icon="el-icon-aim"
v-if="scope.row.propagandaStatus == 'CREATE_COMPLETE'" @click="examine(scope.row)">审核</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['manage:propaganda:edit']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['manage:propaganda:remove']">删除</el-button>
<!-- <el-button
size="mini"
type="text"
@ -280,34 +143,15 @@
</div>
<!-- <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize" @pagination="getList" /> -->
<myPagination
v-show="total > 0"
:total="total"
:pageSize="queryParams.pageSize"
:indexFromWrap="queryParams.pageNum"
@updateCPage="updateCPage"
></myPagination>
<myPagination v-show="total > 0" :total="total" :pageSize="queryParams.pageSize"
:indexFromWrap="queryParams.pageNum" @updateCPage="updateCPage"></myPagination>
</el-col>
</el-row>
<!-- 添加或修改患者宣教信息对话框 -->
<el-dialog
:title="title"
:visible.sync="open"
width="1000px"
append-to-body
>
<el-form
ref="form"
:model="form"
:rules="rules"
label-width="100px"
:inline="true"
>
<el-dialog :title="title" :visible.sync="open" width="1000px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="100px" :inline="true">
<el-form-item label="宣教标题" prop="propagandaTitle">
<el-input
v-model="form.propagandaTitle"
placeholder="请输入宣教标题"
/>
<el-input v-model="form.propagandaTitle" placeholder="请输入宣教标题" />
</el-form-item>
<!-- <el-form-item label="宣教ID" prop="propagandaCode">
<el-input
@ -317,17 +161,8 @@
/>
</el-form-item> -->
<el-form-item label="宣教类型" prop="propagandaType">
<el-select
v-model="form.propagandaType"
placeholder="请选择"
style="width: 206px"
>
<el-option
v-for="item in optionstype"
:key="item.value"
:label="item.label"
:value="item.value"
>
<el-select v-model="form.propagandaType" placeholder="请选择" style="width: 206px">
<el-option v-for="item in optionstype" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</el-form-item>
@ -346,98 +181,47 @@
</el-select>
</el-form-item>-->
<el-form-item label="科室名称" prop="departmentId">
<el-button
type=""
@click="clickinnerVisible()"
:style="
form.departmentName == '请选择科室' ? 'color: #c0c4cc;' : ''
"
style="
<el-button type="" @click="clickinnerVisible()" :style="form.departmentName == '请选择科室' ? 'color: #c0c4cc;' : ''
" style="
width: 206px;
text-align: left;
height: 36px;
overflow: hidden;
"
>{{ form.departmentName }}</el-button
>
">{{ form.departmentName }}</el-button>
</el-form-item>
<el-form-item label="病种名称" prop="diseaseTypeName">
<el-button
type=""
@click="clickdisease()"
:style="
form.diseaseTypeName == '请选择病种' ? 'color: #c0c4cc;' : ''
"
style="
<el-button type="" @click="clickdisease()" :style="form.diseaseTypeName == '请选择病种' ? 'color: #c0c4cc;' : ''
" style="
width: 206px;
text-align: left;
height: 36px;
overflow: hidden;
"
>{{ form.diseaseTypeName }}</el-button
>
">{{ form.diseaseTypeName }}</el-button>
</el-form-item>
<el-form-item label="语音播报" prop="voicebroadcast">
<el-input
v-model="form.voicebroadcast"
type="textarea"
style="width: 206px"
placeholder="请输入语音播报"
/>
<el-input v-model="form.voicebroadcast" type="textarea" style="width: 206px" placeholder="请输入语音播报" />
</el-form-item>
<br>
<el-form-item label="添加封面" prop="propagandaCoverPath">
<stationAcatar
v-if="open"
@imgUrl="imgUrl"
:img="form.propagandaCoverPath"
:type="'propagandaCoverUrl'"
/>
<stationAcatar v-if="open" @imgUrl="imgUrl" :img="form.propagandaCoverPath" :type="'propagandaCoverUrl'" />
</el-form-item>
<el-form-item label="素材选择" prop="imgPath">
<div class="propagandaselect" @click="material" v-if="!form.imgPath">
<div class="add">+</div>
</div>
<img
@click="material"
class="propagandaselect"
:src="baseUrl + form.imgPath"
alt=""
v-else-if="
form.imgPath && querymaterial.materialsType == 'IMAGE_TEXT'
"
/>
<video
@click="material"
style="height: 200px; width: 300px"
v-else-if="form.imgPath && querymaterial.materialsType == 'VIDEO'"
ref="myVideo"
:src="baseUrl + form.imgPath"
controls
></video>
<img @click="material" class="propagandaselect" :src="baseUrl + form.imgPath" alt="" v-else-if="form.imgPath && querymaterial.materialsType == 'IMAGE_TEXT'
" />
<video @click="material" style="height: 200px; width: 300px"
v-else-if="form.imgPath && querymaterial.materialsType == 'VIDEO'" ref="myVideo"
:src="baseUrl + form.imgPath" controls></video>
</el-form-item>
<el-form-item
label="文章摘要"
prop="articleSummary"
class="articleSummary"
>
<el-input
v-model="form.articleSummary"
type="textarea"
style="width: 800px"
placeholder="请输入文章摘要"
maxlength="300"
/>
<el-form-item label="文章摘要" prop="articleSummary" class="articleSummary">
<el-input v-model="form.articleSummary" type="textarea" style="width: 800px" placeholder="请输入文章摘要"
maxlength="300" />
</el-form-item>
<el-form-item label="正文内容" prop="propagandaContent">
<editor
id="id"
ref="myTextarea"
v-model="form.propagandaContent"
:min-height="192"
style="width: 800px"
@paste.native.prevent="handlePaste"
/>
<el-form-item label="正文内容" prop="propagandaContent" v-if="open">
<editor id="id" ref="myTextarea" v-model="form.propagandaContent" :min-height="192" style="width: 800px"
@paste.native.prevent="handlePaste" />
<!-- <editor
v-model="form.propagandaContent"
:min-height="192"
@ -451,166 +235,63 @@
</div>
</el-dialog>
<!-- 科室弹框 -->
<el-dialog
title=""
:visible.sync="innerVisibleshow"
width="1000px"
append-to-body
:before-close="innerVisiblecancel"
>
<el-form
ref="queryForm"
:model="informationqueryParams"
:rules="rules"
label-width="80px"
:inline="true"
>
<el-dialog title="" :visible.sync="innerVisibleshow" width="1000px" append-to-body
:before-close="innerVisiblecancel">
<el-form ref="queryForm" :model="informationqueryParams" :rules="rules" label-width="80px" :inline="true">
<el-form-item label="科室名称" prop="departmentName" label-width="120">
<el-input
v-model="informationqueryParams.departmentName"
placeholder="请输入科室名称"
clearable
/>
<el-input v-model="informationqueryParams.departmentName" placeholder="请输入科室名称" clearable />
</el-form-item>
<el-form-item>
<el-button
type="primary"
icon="el-icon-search"
size="mini"
@click="informationInfoinfo"
>搜索</el-button
>
<el-button
icon="el-icon-refresh"
size="mini"
@click="addresetQuerylist"
>重置</el-button
>
<el-button type="primary" icon="el-icon-search" size="mini" @click="informationInfoinfo">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="addresetQuerylist">重置</el-button>
</el-form-item>
</el-form>
<el-table
:data="infolist"
@cell-dblclick="nurseclick"
v-loading="loading"
>
<el-table :data="infolist" @cell-dblclick="nurseclick" v-loading="loading">
<el-table-column label="请选择" width="100" align="center">
<template slot-scope="scope">
<el-button
type="primary"
style="width: 15px; height: 15px"
v-if="form.departmentId == scope.row.id"
circle
@click="nurseclick(scope.row)"
></el-button>
<el-button
v-else
style="width: 15px; height: 15px"
circle
@click="nurseclick(scope.row)"
></el-button>
<el-button type="primary" style="width: 15px; height: 15px" v-if="form.departmentId == scope.row.id" circle
@click="nurseclick(scope.row)"></el-button>
<el-button v-else style="width: 15px; height: 15px" circle @click="nurseclick(scope.row)"></el-button>
</template>
</el-table-column>
<el-table-column
property="departmentName"
label="科室名称"
align="center"
:show-overflow-tooltip="true"
>
<el-table-column property="departmentName" label="科室名称" align="center" :show-overflow-tooltip="true">
</el-table-column>
</el-table>
<myPagination
v-show="totaldepartment > 0"
:total="totaldepartment"
:pageSize="informationqueryParams.pageSize"
:indexFromWrap="informationqueryParams.pageNum"
@updateCPage="updateCPagetwo"
></myPagination>
<myPagination v-show="totaldepartment > 0" :total="totaldepartment" :pageSize="informationqueryParams.pageSize"
:indexFromWrap="informationqueryParams.pageNum" @updateCPage="updateCPagetwo"></myPagination>
<!-- <pagination v-show="totaldepartment > 0" :total="totaldepartment" :page.sync="informationqueryParams.pageNum"
:limit.sync="informationqueryParams.pageSize" @pagination="informationInfoinfo" /> -->
</el-dialog>
<!-- 病种弹框 -->
<el-dialog
title=""
:visible.sync="diseaseshowst"
width="1000px"
append-to-body
:before-close="canceldiseases"
>
<el-form
ref="queryForm"
:model="querydisease"
:rules="rules"
label-width="80px"
:inline="true"
>
<el-dialog title="" :visible.sync="diseaseshowst" width="1000px" append-to-body :before-close="canceldiseases">
<el-form ref="queryForm" :model="querydisease" :rules="rules" label-width="80px" :inline="true">
<el-form-item label="病种名称" prop="diseaseTypeName" label-width="120">
<el-input
v-model="querydisease.diseaseTypeName"
placeholder="请输入病种名称"
clearable
/>
<el-input v-model="querydisease.diseaseTypeName" placeholder="请输入病种名称" clearable />
</el-form-item>
<el-form-item>
<el-button
type="primary"
icon="el-icon-search"
size="mini"
@click="infodisease"
>搜索</el-button
>
<el-button icon="el-icon-refresh" size="mini" @click="resetdisease"
>重置</el-button
>
<el-button type="primary" icon="el-icon-search" size="mini" @click="infodisease">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetdisease">重置</el-button>
</el-form-item>
</el-form>
<el-table
:data="listdisease"
@cell-dblclick="nurseclickdisease"
v-loading="loading"
>
<el-table :data="listdisease" @cell-dblclick="nurseclickdisease" v-loading="loading">
<el-table-column label="请选择" width="100" align="center">
<template slot-scope="scope">
<el-button
type="primary"
style="width: 15px; height: 15px"
v-if="form.diseaseTypeId == scope.row.id"
circle
@click="nurseclickdisease(scope.row)"
></el-button>
<el-button
v-else
style="width: 15px; height: 15px"
circle
@click="nurseclickdisease(scope.row)"
></el-button>
<el-button type="primary" style="width: 15px; height: 15px" v-if="form.diseaseTypeId == scope.row.id" circle
@click="nurseclickdisease(scope.row)"></el-button>
<el-button v-else style="width: 15px; height: 15px" circle
@click="nurseclickdisease(scope.row)"></el-button>
</template>
</el-table-column>
<el-table-column
property="diseaseTypeName"
label="病种名称"
align="center"
:show-overflow-tooltip="true"
>
<el-table-column property="diseaseTypeName" label="病种名称" align="center" :show-overflow-tooltip="true">
</el-table-column>
</el-table>
<!-- <pagination v-show="diseasetotal > 0" :total="diseasetotal" :page.sync="querydisease.pageNum"
:limit.sync="querydisease.pageSize" @pagination="infodisease" /> -->
<myPagination
v-show="diseasetotal > 0"
:total="diseasetotal"
:pageSize="querydisease.pageSize"
:indexFromWrap="querydisease.pageNum"
@updateCPage="updateCPagethree"
></myPagination>
<myPagination v-show="diseasetotal > 0" :total="diseasetotal" :pageSize="querydisease.pageSize"
:indexFromWrap="querydisease.pageNum" @updateCPage="updateCPagethree"></myPagination>
</el-dialog>
<!-- 审核弹框 -->
<el-dialog
title="提示"
:visible.sync="dialogexamine"
width="30%"
:before-close="handleClose"
center
>
<el-dialog title="提示" :visible.sync="dialogexamine" width="30%" :before-close="handleClose" center>
<span style="font-size: 18px; margin-left: 55px">是否同意审核</span>
<span slot="footer" class="dialog-footer">
<el-button @click="cancelamine">同意</el-button>
@ -618,12 +299,7 @@
</span>
</el-dialog>
<!-- 预览弹框 -->
<el-dialog
title="预览"
:visible.sync="dialogview"
width="50%"
:before-close="handleview"
>
<el-dialog title="预览" :visible.sync="dialogview" width="50%" :before-close="handleview">
<div class="titletop">文章模板:{{ formview.propagandaTitle }}</div>
<div class="bodytop">
<div class="titledata">{{ formview.propagandaTitle }}</div>
@ -640,46 +316,18 @@
</div>
</el-dialog>
<!-- 素材选择弹框 -->
<el-dialog
title="请选择素材"
:visible.sync="dialogmaterial"
width="900px"
:before-close="materialClose"
>
<el-form
:model="queryParams"
ref="queryForm"
size="small"
:inline="true"
v-show="showSearch"
label-width="68px"
>
<el-dialog title="请选择素材" :visible.sync="dialogmaterial" width="900px" :before-close="materialClose">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="素材名称" prop="materialsName">
<el-input
v-model="querymaterial.materialsName"
placeholder="请输入素材名称"
clearable
@keyup.enter.native="handleQuerysc"
/>
<el-input v-model="querymaterial.materialsName" placeholder="请输入素材名称" clearable
@keyup.enter.native="handleQuerysc" />
</el-form-item>
<el-form-item>
<el-button
type="primary"
icon="el-icon-search"
size="mini"
@click="handleQuerysc"
>搜索</el-button
>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuerysc"
>重置</el-button
>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuerysc">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuerysc">重置</el-button>
</el-form-item>
</el-form>
<el-tabs
v-model="querymaterial.materialsType"
type="card"
@tab-click="handleClick"
>
<el-tabs v-model="querymaterial.materialsType" type="card" @tab-click="handleClick">
<el-tab-pane label="图片" name="IMAGE_TEXT"></el-tab-pane>
<el-tab-pane label="视频" name="VIDEO"></el-tab-pane>
</el-tabs>
@ -690,44 +338,29 @@
@change="changecheck($event, item)"
></el-checkbox> -->
<div @click.stop="viewshow(item)">
<img
:src="baseUrl + item.materialsFilePath"
alt=""
v-if="item.materialsFilePath && !item.videoCoverFilePath"
/>
<img
:src="baseUrl + item.videoCoverFilePath"
alt=""
v-if="item.videoCoverFilePath && item.materialsFilePath"
/>
<img :src="baseUrl + item.materialsFilePath" alt=""
v-if="item.materialsFilePath && !item.videoCoverFilePath" />
<img :src="baseUrl + item.videoCoverFilePath" alt=""
v-if="item.videoCoverFilePath && item.materialsFilePath" />
<div class="texttitle">{{ item.materialsName }}</div>
<div class="dataliat">
创建人/创建时间<span>{{ item.createBy }}</span
>/<span>{{ item.createTime }}</span>
创建人/创建时间<span>{{ item.createBy }}</span>/<span>{{ item.createTime }}</span>
</div>
<!-- <div class="dataliat">素材来源</div> -->
<!-- <div class="dataliat">标签暂无</div> -->
<div
class="dataliat bq"
v-if="
item.indications ||
item.drugName ||
item.applicableDiseases ||
item.surgicalName ||
item.inspectionItems ||
item.checkItems
"
>
<div class="dataliat bq" v-if="item.indications ||
item.drugName ||
item.applicableDiseases ||
item.surgicalName ||
item.inspectionItems ||
item.checkItems
">
标签
<span v-if="item.indications">{{ item.indications }}</span>
<span v-if="item.drugName">{{ item.drugName }}</span>
<span v-if="item.applicableDiseases"
>{{ item.applicableDiseases }}</span
>
<span v-if="item.applicableDiseases">{{ item.applicableDiseases }}</span>
<span v-if="item.surgicalName">{{ item.surgicalName }}</span>
<span v-if="item.inspectionItems"
>{{ item.inspectionItems }}</span
>
<span v-if="item.inspectionItems">{{ item.inspectionItems }}</span>
<span v-if="item.checkItems">{{ item.checkItems }}</span>
</div>
<div class="dataliat bq" v-else>标签暂无</div>
@ -737,29 +370,16 @@
</div>
<!-- <pagination v-show="totalmaterial > 0" :total="totalmaterial" :page.sync="querymaterial.pageNum"
:limit.sync="querymaterial.pageSize" @pagination="getmaterial" /> -->
<myPagination
v-show="totalmaterial > 0"
:total="totalmaterial"
:pageSize="querymaterial.pageSize"
:indexFromWrap="querymaterial.pageNum"
@updateCPage="updateCPagefour"
></myPagination>
<myPagination v-show="totalmaterial > 0" :total="totalmaterial" :pageSize="querymaterial.pageSize"
:indexFromWrap="querymaterial.pageNum" @updateCPage="updateCPagefour"></myPagination>
</el-dialog>
<!-- 预览弹框 -->
<el-dialog title="预览" :visible.sync="openview" width="60%">
<div class="viewbody">
<div class="left">
<video
v-if="querymaterial.materialsType == 'VIDEO'"
ref="myVideo"
:src="baseUrl + viewform.materialsFilePath"
controls
></video>
<img
:src="baseUrl + viewform.materialsFilePath"
alt=""
v-if="querymaterial.materialsType == 'IMAGE_TEXT'"
/>
<video v-if="querymaterial.materialsType == 'VIDEO'" ref="myVideo" :src="baseUrl + viewform.materialsFilePath"
controls></video>
<img :src="baseUrl + viewform.materialsFilePath" alt="" v-if="querymaterial.materialsType == 'IMAGE_TEXT'" />
</div>
<div class="right">
<div class="nametitle">素材名称</div>
@ -784,17 +404,8 @@
</div>
</el-dialog>
<!-- 导入弹框 -->
<el-dialog
title=""
:visible.sync="innerexport"
width="1000px"
append-to-body
:before-close="exportcancel"
>
<propagandaexport
@submit="submit"
ref="childComponent"
></propagandaexport>
<el-dialog title="" :visible.sync="innerexport" width="1000px" append-to-body :before-close="exportcancel">
<propagandaexport @submit="submit" ref="childComponent"></propagandaexport>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitexport"> </el-button>
<el-button @click="innerexport = false"> </el-button>
@ -1452,9 +1063,21 @@ export default {
imgUrl(imgUrl) {
this.form.propagandaCoverPath = imgUrl;
},
fn(str) {
let outstr = str.replace(/<iframe [^>]*src=['"]([^'"]+)[^>]*><\/iframe>/g, function (match, capture) {
if (match.indexOf('ql-video') != -1) {
console.log(match, capture)
return `<video class="ql-video" controls="controls" style="width: 100%" poster="${capture}?vframe/jpg/offset/0/w/480" type="video/mp4" src="${capture}"/>`
} else {
return match
}
});
console.log(outstr)
return outstr
},
/** 提交按钮 */
submitForm() {
console.log(this.form, 'this.form')
this.form.propagandaContent = this.fn(this.form.propagandaContent)
this.form.hospitalAgencyId = this.queryParams.hospitalAgencyId
this.form.hospitalAgencyName = this.queryParams.hospitalAgencyName
if (this.form.propagandaContent && (this.form.propagandaContent.length - 7 > this.maxLength)) {
@ -1472,16 +1095,16 @@ export default {
}
if (this.form.id != null) {
updatePropaganda(this.form).then(response => {
this.open = false;
this.$modal.msgSuccess("修改成功");
this.$refs.DepartmentList.Departmentlist()
this.open = false;
this.getList();
});
} else {
addPropaganda(this.form).then(response => {
this.open = false;
this.$modal.msgSuccess("新增成功");
this.$refs.DepartmentList.Departmentlist()
this.open = false;
this.getList();
});
}
@ -1560,6 +1183,7 @@ export default {
height: 100px;
}
}
::v-deep .el-dialog__body {
padding-bottom: 60px !important;
}