作者 xiaoqiu

优化了富文本

@@ -8,4 +8,4 @@ VITE_APP_ENV = 'development' @@ -8,4 +8,4 @@ VITE_APP_ENV = 'development'
8 VITE_APP_BASE_API = '/dev-api' 8 VITE_APP_BASE_API = '/dev-api'
9 9
10 # 开打新的tab的url前缀 10 # 开打新的tab的url前缀
11 -VITE_APP_TAB_URL_PREFIX = 'http://192.168.2.68:6512' 11 +VITE_APP_TAB_URL_PREFIX = 'http://bxhd.crgx.net'
@@ -11,20 +11,18 @@ @@ -11,20 +11,18 @@
11 11
12 ## 平台简介 12 ## 平台简介
13 13
14 -* 本仓库为前端技术栈 [Vue3](https://v3.cn.vuejs.org) + [Element Plus](https://element-plus.org/zh-CN) + [Vite](https://cn.vitejs.dev) 版本。  
15 -* 配套后端代码仓库地址[RuoYi-Vue](https://gitee.com/y_project/RuoYi-Vue)[RuoYi-Vue-fast](https://github.com/yangzongzhuan/RuoYi-Vue-fast) 版本。  
16 -* 前端技术栈([Vue2](https://cn.vuejs.org) + [Element](https://github.com/ElemeFE/element) + [Vue CLI](https://cli.vuejs.org/zh)),请移步[RuoYi-Vue](https://gitee.com/y_project/RuoYi-Vue/tree/master/ruoyi-ui)  
17 -* 阿里云折扣场:[点我进入](http://aly.ruoyi.vip),腾讯云秒杀场:[点我进入](http://txy.ruoyi.vip)    
18 -* 阿里云优惠券:[点我领取](https://www.aliyun.com/minisite/goods?userCode=brki8iof&share_source=copy_link),腾讯云优惠券:[点我领取](https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console)   14 +- 本仓库为前端技术栈 [Vue3](https://v3.cn.vuejs.org) + [Element Plus](https://element-plus.org/zh-CN) + [Vite](https://cn.vitejs.dev) 版本。
  15 +- 配套后端代码仓库地址[RuoYi-Vue](https://gitee.com/y_project/RuoYi-Vue)[RuoYi-Vue-fast](https://github.com/yangzongzhuan/RuoYi-Vue-fast) 版本。
  16 +- 前端技术栈([Vue2](https://cn.vuejs.org) + [Element](https://github.com/ElemeFE/element) + [Vue CLI](https://cli.vuejs.org/zh)),请移步[RuoYi-Vue](https://gitee.com/y_project/RuoYi-Vue/tree/master/ruoyi-ui)
19 17
20 ## 前端运行 18 ## 前端运行
21 19
22 ```bash 20 ```bash
23 # 克隆项目 21 # 克隆项目
24 -git clone https://github.com/yangzongzhuan/RuoYi-Vue3.git 22 +git clone http://120.79.115.47:8099/xiaoming/bxhd-vue3.git
25 23
26 # 进入项目目录 24 # 进入项目目录
27 -cd RuoYi-Vue3 25 +cd bxhd-vue3
28 26
29 # 安装依赖 27 # 安装依赖
30 yarn --registry=https://registry.npmmirror.com 28 yarn --registry=https://registry.npmmirror.com
@@ -39,71 +37,13 @@ yarn dev @@ -39,71 +37,13 @@ yarn dev
39 37
40 ## 内置功能 38 ## 内置功能
41 39
42 -1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。  
43 -2. 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。  
44 -3. 岗位管理:配置系统用户所属担任职务。  
45 -4. 菜单管理:配置系统菜单,操作权限,按钮权限标识等。  
46 -5. 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。  
47 -6. 字典管理:对系统中经常使用的一些较为固定的数据进行维护。  
48 -7. 参数管理:对系统动态配置常用参数。 40 +1. 首页:数据统计。
  41 +2. 待处理保单:对用户登记的保单进行审核,通过、退回、修改、作废和分配。
  42 +3. 已处理保单:查看已处理的保单。
  43 +4. 进行中保单:查看进行中的保单。
  44 +5. 已完结保单:查看已完结的保单,并查看保单回馈。
  45 +6. 已作废保单:查看已作废保单,并查看作废备注。
  46 +7. 保单报表:对所有的数据进行统计,可查看账号下的数据,可对数据进行筛选、导出。
49 8. 通知公告:系统通知公告信息发布维护。 47 8. 通知公告:系统通知公告信息发布维护。
50 -9. 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。  
51 -10. 登录日志:系统登录日志记录查询包含登录异常。  
52 -11. 在线用户:当前系统中活跃用户状态监控。  
53 -12. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。  
54 -13. 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。  
55 -14. 系统接口:根据业务代码自动生成相关的api接口文档。  
56 -15. 服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。  
57 -16. 缓存监控:对系统的缓存信息查询,命令统计等。  
58 -17. 在线构建器:拖动表单元素生成相应的HTML代码。  
59 -18. 连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。  
60 -  
61 -## 在线体验  
62 -  
63 -- admin/admin123  
64 -- 陆陆续续收到一些打赏,为了更好的体验已用于演示服务器升级。谢谢各位小伙伴。  
65 -  
66 -演示地址:http://vue.ruoyi.vip  
67 -文档地址:http://doc.ruoyi.vip  
68 -  
69 -## 演示图  
70 -  
71 -<table>  
72 - <tr>  
73 - <td><img src="https://oscimg.oschina.net/oscnet/cd1f90be5f2684f4560c9519c0f2a232ee8.jpg"/></td>  
74 - <td><img src="https://oscimg.oschina.net/oscnet/1cbcf0e6f257c7d3a063c0e3f2ff989e4b3.jpg"/></td>  
75 - </tr>  
76 - <tr>  
77 - <td><img src="https://oscimg.oschina.net/oscnet/up-8074972883b5ba0622e13246738ebba237a.png"/></td>  
78 - <td><img src="https://oscimg.oschina.net/oscnet/up-9f88719cdfca9af2e58b352a20e23d43b12.png"/></td>  
79 - </tr>  
80 - <tr>  
81 - <td><img src="https://oscimg.oschina.net/oscnet/up-39bf2584ec3a529b0d5a3b70d15c9b37646.png"/></td>  
82 - <td><img src="https://oscimg.oschina.net/oscnet/up-936ec82d1f4872e1bc980927654b6007307.png"/></td>  
83 - </tr>  
84 - <tr>  
85 - <td><img src="https://oscimg.oschina.net/oscnet/up-b2d62ceb95d2dd9b3fbe157bb70d26001e9.png"/></td>  
86 - <td><img src="https://oscimg.oschina.net/oscnet/up-d67451d308b7a79ad6819723396f7c3d77a.png"/></td>  
87 - </tr>  
88 - <tr>  
89 - <td><img src="https://oscimg.oschina.net/oscnet/5e8c387724954459291aafd5eb52b456f53.jpg"/></td>  
90 - <td><img src="https://oscimg.oschina.net/oscnet/644e78da53c2e92a95dfda4f76e6d117c4b.jpg"/></td>  
91 - </tr>  
92 - <tr>  
93 - <td><img src="https://oscimg.oschina.net/oscnet/up-8370a0d02977eebf6dbf854c8450293c937.png"/></td>  
94 - <td><img src="https://oscimg.oschina.net/oscnet/up-49003ed83f60f633e7153609a53a2b644f7.png"/></td>  
95 - </tr>  
96 - <tr>  
97 - <td><img src="https://oscimg.oschina.net/oscnet/up-d4fe726319ece268d4746602c39cffc0621.png"/></td>  
98 - <td><img src="https://oscimg.oschina.net/oscnet/up-c195234bbcd30be6927f037a6755e6ab69c.png"/></td>  
99 - </tr>  
100 - <tr>  
101 - <td><img src="https://oscimg.oschina.net/oscnet/b6115bc8c31de52951982e509930b20684a.jpg"/></td>  
102 - <td><img src="https://oscimg.oschina.net/oscnet/up-5e4daac0bb59612c5038448acbcef235e3a.png"/></td>  
103 - </tr>  
104 -</table>  
105 -  
106 -  
107 -## 若依前后端分离交流群  
108 -  
109 -QQ群: [![加入QQ群](https://img.shields.io/badge/已满-937441-blue.svg)](https://jq.qq.com/?_wv=1027&k=5bVB1og) [![加入QQ群](https://img.shields.io/badge/已满-887144332-blue.svg)](https://jq.qq.com/?_wv=1027&k=5eiA4DH) [![加入QQ群](https://img.shields.io/badge/已满-180251782-blue.svg)](https://jq.qq.com/?_wv=1027&k=5AxMKlC) [![加入QQ群](https://img.shields.io/badge/已满-104180207-blue.svg)](https://jq.qq.com/?_wv=1027&k=51G72yr) [![加入QQ群](https://img.shields.io/badge/已满-186866453-blue.svg)](https://jq.qq.com/?_wv=1027&k=VvjN2nvu) [![加入QQ群](https://img.shields.io/badge/已满-201396349-blue.svg)](https://jq.qq.com/?_wv=1027&k=5vYAqA05) [![加入QQ群](https://img.shields.io/badge/已满-101456076-blue.svg)](https://jq.qq.com/?_wv=1027&k=kOIINEb5) [![加入QQ群](https://img.shields.io/badge/已满-101539465-blue.svg)](https://jq.qq.com/?_wv=1027&k=UKtX5jhs) [![加入QQ群](https://img.shields.io/badge/已满-264312783-blue.svg)](https://jq.qq.com/?_wv=1027&k=EI9an8lJ) [![加入QQ群](https://img.shields.io/badge/已满-167385320-blue.svg)](https://jq.qq.com/?_wv=1027&k=SWCtLnMz) [![加入QQ群](https://img.shields.io/badge/已满-104748341-blue.svg)](https://jq.qq.com/?_wv=1027&k=96Dkdq0k) [![加入QQ群](https://img.shields.io/badge/已满-160110482-blue.svg)](https://jq.qq.com/?_wv=1027&k=0fsNiYZt) [![加入QQ群](https://img.shields.io/badge/170801498-blue.svg)](https://jq.qq.com/?_wv=1027&k=7xw4xUG1) 点击按钮入群。  
  48 +9. 用户管理:可添加用户登录,每个账号 id 可分配角色,可查看自己所拥有的角色。
  49 +10. 配置规则:对用户登记的保单进行规则自动分配。
1 <template> 1 <template>
2 <div> 2 <div>
3 - <QuillEditor  
4 - ref="myQuillEditor"  
5 - theme="snow" 3 + <el-upload
  4 + :action="uploadUrl"
  5 + :before-upload="handleBeforeUpload"
  6 + :on-success="handleUploadSuccess"
  7 + :on-error="handleUploadError"
  8 + name="file"
  9 + :show-file-list="false"
  10 + :headers="headers"
  11 + class="editor-img-uploader"
  12 + v-if="type == 'url'"
  13 + >
  14 + <i ref="uploadRef" class="editor-img-uploader"></i>
  15 + </el-upload>
  16 + </div>
  17 + <div class="editor">
  18 + <quill-editor
  19 + ref="quillEditorRef"
6 v-model:content="content" 20 v-model:content="content"
7 - :options="data.editorOption"  
8 contentType="html" 21 contentType="html"
9 - @update:content="setValue()"  
10 - />  
11 - <!-- 使用自定义图片上传 -->  
12 - <input  
13 - type="file"  
14 - hidden  
15 - accept=".jpg,.png"  
16 - ref="fileBtn"  
17 - @change="handleUpload" 22 + @textChange="(e) => $emit('update:modelValue', content)"
  23 + :options="options"
  24 + :style="styles"
18 /> 25 />
19 </div> 26 </div>
20 </template> 27 </template>
@@ -22,90 +29,232 @@ @@ -22,90 +29,232 @@
22 <script setup> 29 <script setup>
23 import { QuillEditor } from "@vueup/vue-quill"; 30 import { QuillEditor } from "@vueup/vue-quill";
24 import "@vueup/vue-quill/dist/vue-quill.snow.css"; 31 import "@vueup/vue-quill/dist/vue-quill.snow.css";
25 -import { reactive, onMounted, ref, toRaw, watch } from "vue";  
26 -import { uploadAvatar } from "@/api/system/user"; 32 +import { getToken } from "@/utils/auth";
27 33
28 -const props = defineProps(["value"]);  
29 -const emit = defineEmits(["updateValue"]);  
30 -const content = ref("");  
31 -const myQuillEditor = ref();  
32 -watch(  
33 - () => props.value,  
34 - (val) => {  
35 - toRaw(myQuillEditor.value).setHTML(val); 34 +const { proxy } = getCurrentInstance();
  35 +
  36 +const quillEditorRef = ref();
  37 +const uploadUrl = ref(import.meta.env.VITE_APP_BASE_API + "/common/upload"); // 上传的图片服务器地址
  38 +const headers = ref({
  39 + Authorization: "Bearer " + getToken(),
  40 +});
  41 +
  42 +const props = defineProps({
  43 + /* 编辑器的内容 */
  44 + modelValue: {
  45 + type: String,
36 }, 46 },
37 - { deep: true }  
38 -);  
39 -const fileBtn = ref();  
40 -const data = reactive({  
41 - content: "",  
42 - editorOption: { 47 + /* 高度 */
  48 + height: {
  49 + type: Number,
  50 + default: null,
  51 + },
  52 + /* 最小高度 */
  53 + minHeight: {
  54 + type: Number,
  55 + default: null,
  56 + },
  57 + /* 只读 */
  58 + readOnly: {
  59 + type: Boolean,
  60 + default: false,
  61 + },
  62 + /* 上传文件大小限制(MB) */
  63 + fileSize: {
  64 + type: Number,
  65 + default: 5,
  66 + },
  67 + /* 类型(base64格式、url格式) */
  68 + type: {
  69 + type: String,
  70 + default: "url",
  71 + },
  72 +});
  73 +
  74 +const options = ref({
  75 + theme: "snow",
  76 + bounds: document.body,
  77 + debug: "warn",
43 modules: { 78 modules: {
  79 + // 工具栏配置
44 toolbar: [ 80 toolbar: [
45 - ["bold", "italic", "underline", "strike"],  
46 - [{ size: ["small", false, "large", "huge"] }],  
47 - [{ font: [] }],  
48 - [{ align: [] }],  
49 - [{ list: "ordered" }, { list: "bullet" }],  
50 - [{ indent: "-1" }, { indent: "+1" }],  
51 - [{ header: 1 }, { header: 2 }],  
52 - ["image"],  
53 - [{ direction: "rtl" }],  
54 - [{ color: [] }, { background: [] }], 81 + ["bold", "italic", "underline", "strike"], // 加粗 斜体 下划线 删除线
  82 + ["blockquote", "code-block"], // 引用 代码块
  83 + [{ list: "ordered" }, { list: "bullet" }], // 有序、无序列表
  84 + [{ indent: "-1" }, { indent: "+1" }], // 缩进
  85 + [{ size: ["small", false, "large", "huge"] }], // 字体大小
  86 + [{ header: [1, 2, 3, 4, 5, 6, false] }], // 标题
  87 + [{ color: [] }, { background: [] }], // 字体颜色、字体背景颜色
  88 + [{ align: [] }], // 对齐方式
  89 + ["clean"], // 清除文本格式
  90 + ["link", "image", "video"], // 链接、图片、视频
55 ], 91 ],
56 }, 92 },
57 - placeholder: "请输入内容...", 93 + placeholder: "请输入内容",
  94 + readOnly: props.readOnly,
  95 +});
  96 +
  97 +const styles = computed(() => {
  98 + let style = {};
  99 + if (props.minHeight) {
  100 + style.minHeight = `${props.minHeight}px`;
  101 + }
  102 + if (props.height) {
  103 + style.height = `${props.height}px`;
  104 + }
  105 + return style;
  106 +});
  107 +
  108 +const content = ref("");
  109 +watch(
  110 + () => props.modelValue,
  111 + (v) => {
  112 + if (v !== content.value) {
  113 + content.value = v === undefined ? "<p></p>" : v;
  114 + }
58 }, 115 },
  116 + { immediate: true }
  117 +);
  118 +
  119 +// 如果设置了上传地址则自定义图片上传事件
  120 +onMounted(() => {
  121 + if (props.type == "url") {
  122 + let quill = quillEditorRef.value.getQuill();
  123 + let toolbar = quill.getModule("toolbar");
  124 + toolbar.addHandler("image", (value) => {
  125 + if (value) {
  126 + proxy.$refs.uploadRef.click();
  127 + } else {
  128 + quill.format("image", false);
  129 + }
  130 + });
  131 + }
59 }); 132 });
60 -const imgHandler = (state) => {  
61 - if (state) {  
62 - fileBtn.value.click(); 133 +
  134 +// 上传前校检格式和大小
  135 +function handleBeforeUpload(file) {
  136 + const type = ["image/jpeg", "image/jpg", "image/png", "image/svg"];
  137 + const isJPG = type.includes(file.type);
  138 + //检验文件格式
  139 + if (!isJPG) {
  140 + proxy.$modal.msgError(`图片格式错误!`);
  141 + return false;
63 } 142 }
64 -};  
65 -const setValue = () => {  
66 - const text = toRaw(myQuillEditor.value).getHTML();  
67 - emit("updateValue", text);  
68 -};  
69 -const handleUpload = (e) => {  
70 - const files = Array.prototype.slice.call(e.target.files);  
71 - if (!files) {  
72 - return; 143 + // 校检文件大小
  144 + if (props.fileSize) {
  145 + const isLt = file.size / 1024 / 1024 < props.fileSize;
  146 + if (!isLt) {
  147 + proxy.$modal.msgError(`上传文件大小不能超过 ${props.fileSize} MB!`);
  148 + return false;
73 } 149 }
74 - const formdata = new FormData();  
75 - formdata.append("avatarfile", files[0]);  
76 - const quill = toRaw(myQuillEditor.value).getQuill();  
77 - const length = quill.getSelection().index;  
78 - // 调整光标到最后  
79 - quill.setSelection(length + 1);  
80 - uploadAvatar(formdata).then((res) => {  
81 - if (res.imgUrl) {  
82 - const quill = toRaw(myQuillEditor.value).getQuill();  
83 - const length = quill.getSelection().index;  
84 - // 插入图片,res为服务器返回的图片链接地址 150 + }
  151 + return true;
  152 +}
  153 +
  154 +// 上传成功处理
  155 +function handleUploadSuccess(res, file) {
  156 + // 如果上传成功
  157 + if (res.code == 200) {
  158 + // 获取富文本实例
  159 + let quill = toRaw(quillEditorRef.value).getQuill();
  160 + // 获取光标位置
  161 + let length = quill.selection.savedRange.index;
  162 + // 插入图片,res.url为服务器返回的图片链接地址
85 quill.insertEmbed( 163 quill.insertEmbed(
86 length, 164 length,
87 "image", 165 "image",
88 - import.meta.env.VITE_APP_TAB_URL_PREFIX + res.imgUrl 166 + import.meta.env.VITE_APP_BASE_API + res.fileName
89 ); 167 );
90 // 调整光标到最后 168 // 调整光标到最后
91 quill.setSelection(length + 1); 169 quill.setSelection(length + 1);
  170 + } else {
  171 + proxy.$modal.msgError("图片插入失败");
92 } 172 }
93 - });  
94 -};  
95 -onMounted(() => {  
96 - const quill = toRaw(myQuillEditor.value).getQuill();  
97 - if (myQuillEditor.value) {  
98 - quill.getModule("toolbar").addHandler("image", imgHandler);  
99 - }  
100 - toRaw(myQuillEditor.value).setHTML(props.value);  
101 -}); 173 +}
  174 +
  175 +// 上传失败处理
  176 +function handleUploadError() {
  177 + proxy.$modal.msgError("图片插入失败");
  178 +}
102 </script> 179 </script>
103 -<style scoped lang="scss">  
104 -:deep(.ql-editor) {  
105 - min-height: 180px; 180 +
  181 +<style>
  182 +.editor-img-uploader {
  183 + display: none;
  184 +}
  185 +.editor,
  186 +.ql-toolbar {
  187 + white-space: pre-wrap !important;
  188 + line-height: normal !important;
  189 +}
  190 +.quill-img {
  191 + display: none;
  192 +}
  193 +.ql-snow .ql-tooltip[data-mode="link"]::before {
  194 + content: "请输入链接地址:";
  195 +}
  196 +.ql-snow .ql-tooltip.ql-editing a.ql-action::after {
  197 + border-right: 0px;
  198 + content: "保存";
  199 + padding-right: 0px;
  200 +}
  201 +.ql-snow .ql-tooltip[data-mode="video"]::before {
  202 + content: "请输入视频地址:";
  203 +}
  204 +.ql-snow .ql-picker.ql-size .ql-picker-label::before,
  205 +.ql-snow .ql-picker.ql-size .ql-picker-item::before {
  206 + content: "14px";
  207 +}
  208 +.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="small"]::before,
  209 +.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="small"]::before {
  210 + content: "10px";
  211 +}
  212 +.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="large"]::before,
  213 +.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="large"]::before {
  214 + content: "18px";
  215 +}
  216 +.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="huge"]::before,
  217 +.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="huge"]::before {
  218 + content: "32px";
  219 +}
  220 +.ql-snow .ql-picker.ql-header .ql-picker-label::before,
  221 +.ql-snow .ql-picker.ql-header .ql-picker-item::before {
  222 + content: "文本";
  223 +}
  224 +.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="1"]::before,
  225 +.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]::before {
  226 + content: "标题1";
  227 +}
  228 +.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="2"]::before,
  229 +.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]::before {
  230 + content: "标题2";
  231 +}
  232 +.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="3"]::before,
  233 +.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]::before {
  234 + content: "标题3";
  235 +}
  236 +.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="4"]::before,
  237 +.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]::before {
  238 + content: "标题4";
  239 +}
  240 +.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="5"]::before,
  241 +.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]::before {
  242 + content: "标题5";
  243 +}
  244 +.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="6"]::before,
  245 +.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]::before {
  246 + content: "标题6";
  247 +}
  248 +.ql-snow .ql-picker.ql-font .ql-picker-label::before,
  249 +.ql-snow .ql-picker.ql-font .ql-picker-item::before {
  250 + content: "标准字体";
  251 +}
  252 +.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="serif"]::before,
  253 +.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="serif"]::before {
  254 + content: "衬线字体";
106 } 255 }
107 -:deep(.ql-formats) {  
108 - height: 21px;  
109 - line-height: 21px; 256 +.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="monospace"]::before,
  257 +.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="monospace"]::before {
  258 + content: "等宽字体";
110 } 259 }
111 </style> 260 </style>
@@ -215,8 +215,8 @@ @@ -215,8 +215,8 @@
215 append-to-body 215 append-to-body
216 > 216 >
217 <QuillEditor 217 <QuillEditor
218 - :value="deprecatedForm.deprecatedReason"  
219 - @updateValue="getReason" 218 + v-model="deprecatedForm.deprecatedReason"
  219 + :min-height="192"
220 /> 220 />
221 <template #footer> 221 <template #footer>
222 <div class="dialog-footer"> 222 <div class="dialog-footer">
@@ -327,10 +327,7 @@ @@ -327,10 +327,7 @@
327 <el-row> 327 <el-row>
328 <el-col :span="24"> 328 <el-col :span="24">
329 <el-form-item prop="progress" label="保单回馈内容"> 329 <el-form-item prop="progress" label="保单回馈内容">
330 - <QuillEditor  
331 - :value="FeedbackForm.message"  
332 - @updateValue="getMsg"  
333 - /> 330 + <QuillEditor v-model="FeedbackForm.message" :min-height="192" />
334 </el-form-item> 331 </el-form-item>
335 </el-col> 332 </el-col>
336 </el-row> 333 </el-row>
@@ -347,7 +344,11 @@ @@ -347,7 +344,11 @@
347 <el-dialog v-model="showIssue" title="保单信息" width="700" append-to-body> 344 <el-dialog v-model="showIssue" title="保单信息" width="700" append-to-body>
348 <el-form :model="IssueForm" ref="policyRef" label-width="100px"> 345 <el-form :model="IssueForm" ref="policyRef" label-width="100px">
349 <el-form-item label="问题件原因" prop="progress"> 346 <el-form-item label="问题件原因" prop="progress">
350 - <QuillEditor :value="IssueForm.deprecatedReason" /> 347 + <QuillEditor
  348 + v-model="IssueForm.deprecatedReason"
  349 + :readOnly="true"
  350 + :min-height="192"
  351 + />
351 </el-form-item> 352 </el-form-item>
352 </el-form> 353 </el-form>
353 </el-dialog> 354 </el-dialog>
@@ -564,8 +565,6 @@ const typeId = ref(0); // 判断类型 0 问题件 1 退回 2 作废 @@ -564,8 +565,6 @@ const typeId = ref(0); // 判断类型 0 问题件 1 退回 2 作废
564 const transferTip = ref(""); //流转下一家名称 565 const transferTip = ref(""); //流转下一家名称
565 const transferDeptId = ref(""); // 流转的部门公司ID 566 const transferDeptId = ref(""); // 流转的部门公司ID
566 const open = ref(false); 567 const open = ref(false);
567 -const timer = ref(null);  
568 -const timerReason = ref(null);  
569 const form = ref({}); 568 const form = ref({});
570 const timeFrame = ref(null); 569 const timeFrame = ref(null);
571 const showFeedback = ref(false); 570 const showFeedback = ref(false);
@@ -715,7 +714,6 @@ const handleSuccess = (associationapprove) => { @@ -715,7 +714,6 @@ const handleSuccess = (associationapprove) => {
715 }; 714 };
716 // 退回保单 715 // 退回保单
717 const handleFallback = (associationapprove) => { 716 const handleFallback = (associationapprove) => {
718 - clearTimeout(timerReason.value);  
719 deprecatedForm.value = { 717 deprecatedForm.value = {
720 associationapprove, 718 associationapprove,
721 taskId: taskId.value, 719 taskId: taskId.value,
@@ -727,7 +725,6 @@ const handleFallback = (associationapprove) => { @@ -727,7 +725,6 @@ const handleFallback = (associationapprove) => {
727 }; 725 };
728 // 作废保单 726 // 作废保单
729 const handleVoid = (associationapprove) => { 727 const handleVoid = (associationapprove) => {
730 - clearTimeout(timerReason.value);  
731 deprecatedForm.value = { 728 deprecatedForm.value = {
732 associationapprove, 729 associationapprove,
733 taskId: taskId.value, 730 taskId: taskId.value,
@@ -860,13 +857,6 @@ const submit = () => { @@ -860,13 +857,6 @@ const submit = () => {
860 }); 857 });
861 }; 858 };
862 859
863 -const getMsg = (val) => {  
864 - clearTimeout(timer.value);  
865 - timer.value = setTimeout(() => {  
866 - FeedbackForm.value.comment = val;  
867 - }, 1000);  
868 -};  
869 -  
870 // 获取流转下一家分配公司 860 // 获取流转下一家分配公司
871 const getTransferTip = async () => { 861 const getTransferTip = async () => {
872 loadingBtn.value = true; 862 loadingBtn.value = true;
@@ -876,13 +866,6 @@ const getTransferTip = async () => { @@ -876,13 +866,6 @@ const getTransferTip = async () => {
876 loadingBtn.value = false; 866 loadingBtn.value = false;
877 }; 867 };
878 868
879 -// 填写作废原因  
880 -const getReason = (val) => {  
881 - clearTimeout(timerReason.value);  
882 - timerReason.value = setTimeout(() => {  
883 - deprecatedForm.value.deprecatedReason = val;  
884 - }, 1000);  
885 -};  
886 // 提交修改 869 // 提交修改
887 const submitUpdate = () => { 870 const submitUpdate = () => {
888 updateCarInfo(form.value).then((response) => { 871 updateCarInfo(form.value).then((response) => {
@@ -209,8 +209,8 @@ @@ -209,8 +209,8 @@
209 append-to-body 209 append-to-body
210 > 210 >
211 <QuillEditor 211 <QuillEditor
212 - :value="deprecatedForm.deprecatedReason"  
213 - @updateValue="getReason" 212 + v-model="deprecatedForm.deprecatedReason"
  213 + :min-height="192"
214 /> 214 />
215 <template #footer> 215 <template #footer>
216 <div class="dialog-footer"> 216 <div class="dialog-footer">
@@ -321,10 +321,7 @@ @@ -321,10 +321,7 @@
321 <el-row> 321 <el-row>
322 <el-col :span="24"> 322 <el-col :span="24">
323 <el-form-item prop="progress" label="保单回馈内容"> 323 <el-form-item prop="progress" label="保单回馈内容">
324 - <QuillEditor  
325 - :value="FeedbackForm.message"  
326 - @updateValue="getMsg"  
327 - /> 324 + <QuillEditor v-model="FeedbackForm.message" :min-height="192" />
328 </el-form-item> 325 </el-form-item>
329 </el-col> 326 </el-col>
330 </el-row> 327 </el-row>
@@ -341,7 +338,11 @@ @@ -341,7 +338,11 @@
341 <el-dialog v-model="showIssue" title="保单信息" width="700" append-to-body> 338 <el-dialog v-model="showIssue" title="保单信息" width="700" append-to-body>
342 <el-form :model="IssueForm" ref="policyRef" label-width="100px"> 339 <el-form :model="IssueForm" ref="policyRef" label-width="100px">
343 <el-form-item label="问题件原因" prop="progress"> 340 <el-form-item label="问题件原因" prop="progress">
344 - <QuillEditor :value="IssueForm.deprecatedReason" /> 341 + <QuillEditor
  342 + v-model="IssueForm.deprecatedReason"
  343 + :readOnly="true"
  344 + :min-height="192"
  345 + />
345 </el-form-item> 346 </el-form-item>
346 </el-form> 347 </el-form>
347 </el-dialog> 348 </el-dialog>
@@ -550,8 +551,6 @@ const typeId = ref(0); // 判断类型 0 问题件 1 退回 2 作废 @@ -550,8 +551,6 @@ const typeId = ref(0); // 判断类型 0 问题件 1 退回 2 作废
550 const transferTip = ref(""); //流转下一家名称 551 const transferTip = ref(""); //流转下一家名称
551 const transferDeptId = ref(""); // 流转的部门公司ID 552 const transferDeptId = ref(""); // 流转的部门公司ID
552 const open = ref(false); 553 const open = ref(false);
553 -const timer = ref(null);  
554 -const timerReason = ref(null);  
555 const form = ref({}); 554 const form = ref({});
556 const showFeedback = ref(false); 555 const showFeedback = ref(false);
557 const transferShow = ref(false); 556 const transferShow = ref(false);
@@ -713,7 +712,6 @@ const handleSuccess = (associationapprove) => { @@ -713,7 +712,6 @@ const handleSuccess = (associationapprove) => {
713 }; 712 };
714 // 退回保单 713 // 退回保单
715 const handleFallback = (associationapprove) => { 714 const handleFallback = (associationapprove) => {
716 - clearTimeout(timerReason.value);  
717 deprecatedForm.value = { 715 deprecatedForm.value = {
718 associationapprove, 716 associationapprove,
719 taskId: taskId.value, 717 taskId: taskId.value,
@@ -725,7 +723,6 @@ const handleFallback = (associationapprove) => { @@ -725,7 +723,6 @@ const handleFallback = (associationapprove) => {
725 }; 723 };
726 // 作废保单 724 // 作废保单
727 const handleVoid = (associationapprove) => { 725 const handleVoid = (associationapprove) => {
728 - clearTimeout(timerReason.value);  
729 deprecatedForm.value = { 726 deprecatedForm.value = {
730 associationapprove, 727 associationapprove,
731 taskId: taskId.value, 728 taskId: taskId.value,
@@ -859,13 +856,6 @@ const submit = () => { @@ -859,13 +856,6 @@ const submit = () => {
859 }); 856 });
860 }; 857 };
861 858
862 -const getMsg = (val) => {  
863 - clearTimeout(timer.value);  
864 - timer.value = setTimeout(() => {  
865 - FeedbackForm.value.comment = val;  
866 - }, 1000);  
867 -};  
868 -  
869 // 获取流转下一家分配公司 859 // 获取流转下一家分配公司
870 const getTransferTip = async () => { 860 const getTransferTip = async () => {
871 loadingBtn.value = true; 861 loadingBtn.value = true;
@@ -874,14 +864,6 @@ const getTransferTip = async () => { @@ -874,14 +864,6 @@ const getTransferTip = async () => {
874 transferDeptId.value = data.deptId.toString(); 864 transferDeptId.value = data.deptId.toString();
875 loadingBtn.value = false; 865 loadingBtn.value = false;
876 }; 866 };
877 -  
878 -// 填写作废原因  
879 -const getReason = (val) => {  
880 - clearTimeout(timerReason.value);  
881 - timerReason.value = setTimeout(() => {  
882 - deprecatedForm.value.deprecatedReason = val;  
883 - }, 1000);  
884 -};  
885 // 提交修改 867 // 提交修改
886 const submitUpdate = () => { 868 const submitUpdate = () => {
887 updateCarInfo(form.value).then((response) => { 869 updateCarInfo(form.value).then((response) => {
@@ -360,7 +360,11 @@ @@ -360,7 +360,11 @@
360 </el-col> 360 </el-col>
361 </el-row> 361 </el-row>
362 <el-form-item :label="labelTitle" prop="progress"> 362 <el-form-item :label="labelTitle" prop="progress">
363 - <QuillEditor :value="form.comment" @updateValue="getMsg" /> 363 + <QuillEditor
  364 + v-model="form.comment"
  365 + :readOnly="true"
  366 + :min-height="192"
  367 + />
364 </el-form-item> 368 </el-form-item>
365 </el-form> 369 </el-form>
366 <template #footer> 370 <template #footer>
@@ -583,10 +587,6 @@ const queryRemark = async (row) => { @@ -583,10 +587,6 @@ const queryRemark = async (row) => {
583 } 587 }
584 }; 588 };
585 589
586 -const getMsg = (val) => {  
587 - form.value.comment = val;  
588 -};  
589 -  
590 /** 搜索按钮操作 */ 590 /** 搜索按钮操作 */
591 function handleQuery() { 591 function handleQuery() {
592 queryParams.pageNum = 1; 592 queryParams.pageNum = 1;
@@ -354,7 +354,11 @@ @@ -354,7 +354,11 @@
354 </el-col> 354 </el-col>
355 </el-row> 355 </el-row>
356 <el-form-item :label="labelTitle" prop="progress"> 356 <el-form-item :label="labelTitle" prop="progress">
357 - <QuillEditor :value="form.comment" @updateValue="getMsg" /> 357 + <QuillEditor
  358 + v-model="form.comment"
  359 + :readOnly="true"
  360 + :min-height="192"
  361 + />
358 </el-form-item> 362 </el-form-item>
359 </el-form> 363 </el-form>
360 <template #footer> 364 <template #footer>
@@ -577,10 +581,6 @@ const queryRemark = async (row) => { @@ -577,10 +581,6 @@ const queryRemark = async (row) => {
577 } 581 }
578 }; 582 };
579 583
580 -const getMsg = (val) => {  
581 - form.value.comment = val;  
582 -};  
583 -  
584 /** 搜索按钮操作 */ 584 /** 搜索按钮操作 */
585 function handleQuery() { 585 function handleQuery() {
586 queryParams.pageNum = 1; 586 queryParams.pageNum = 1;
@@ -207,7 +207,7 @@ @@ -207,7 +207,7 @@
207 </el-col> 207 </el-col>
208 <el-col :span="24"> 208 <el-col :span="24">
209 <el-form-item label="内容"> 209 <el-form-item label="内容">
210 - <QuillEditor :value="form.noticeContent" @updateValue="getMsg" /> 210 + <QuillEditor v-model="form.noticeContent" :min-height="192" />
211 </el-form-item> 211 </el-form-item>
212 </el-col> 212 </el-col>
213 </el-row> 213 </el-row>
@@ -325,12 +325,6 @@ function handleUpdate(row) { @@ -325,12 +325,6 @@ function handleUpdate(row) {
325 title.value = "修改公告"; 325 title.value = "修改公告";
326 }); 326 });
327 } 327 }
328 -const getMsg = (val) => {  
329 - clearTimeout(timer.value);  
330 - timer.value = setTimeout(() => {  
331 - form.value.noticeContent = val;  
332 - }, 1000);  
333 -};  
334 /** 提交按钮 */ 328 /** 提交按钮 */
335 function submitForm() { 329 function submitForm() {
336 proxy.$refs["noticeRef"].validate((valid) => { 330 proxy.$refs["noticeRef"].validate((valid) => {