正在显示
8 个修改的文件
包含
277 行增加
和
229 行删除
| @@ -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群: [](https://jq.qq.com/?_wv=1027&k=5bVB1og) [](https://jq.qq.com/?_wv=1027&k=5eiA4DH) [](https://jq.qq.com/?_wv=1027&k=5AxMKlC) [](https://jq.qq.com/?_wv=1027&k=51G72yr) [](https://jq.qq.com/?_wv=1027&k=VvjN2nvu) [](https://jq.qq.com/?_wv=1027&k=5vYAqA05) [](https://jq.qq.com/?_wv=1027&k=kOIINEb5) [](https://jq.qq.com/?_wv=1027&k=UKtX5jhs) [](https://jq.qq.com/?_wv=1027&k=EI9an8lJ) [](https://jq.qq.com/?_wv=1027&k=SWCtLnMz) [](https://jq.qq.com/?_wv=1027&k=96Dkdq0k) [](https://jq.qq.com/?_wv=1027&k=0fsNiYZt) [](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: { | ||
| 43 | - modules: { | ||
| 44 | - 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: [] }], | ||
| 55 | - ], | ||
| 56 | - }, | ||
| 57 | - placeholder: "请输入内容...", | 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", | ||
| 78 | + modules: { | ||
| 79 | + // 工具栏配置 | ||
| 80 | + toolbar: [ | ||
| 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"], // 链接、图片、视频 | ||
| 91 | + ], | ||
| 58 | }, | 92 | }, |
| 93 | + placeholder: "请输入内容", | ||
| 94 | + readOnly: props.readOnly, | ||
| 59 | }); | 95 | }); |
| 60 | -const imgHandler = (state) => { | ||
| 61 | - if (state) { | ||
| 62 | - fileBtn.value.click(); | 96 | + |
| 97 | +const styles = computed(() => { | ||
| 98 | + let style = {}; | ||
| 99 | + if (props.minHeight) { | ||
| 100 | + style.minHeight = `${props.minHeight}px`; | ||
| 63 | } | 101 | } |
| 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; | 102 | + if (props.height) { |
| 103 | + style.height = `${props.height}px`; | ||
| 73 | } | 104 | } |
| 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为服务器返回的图片链接地址 | ||
| 85 | - quill.insertEmbed( | ||
| 86 | - length, | ||
| 87 | - "image", | ||
| 88 | - import.meta.env.VITE_APP_TAB_URL_PREFIX + res.imgUrl | ||
| 89 | - ); | ||
| 90 | - // 调整光标到最后 | ||
| 91 | - quill.setSelection(length + 1); | 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; | ||
| 92 | } | 114 | } |
| 93 | - }); | ||
| 94 | -}; | 115 | + }, |
| 116 | + { immediate: true } | ||
| 117 | +); | ||
| 118 | + | ||
| 119 | +// 如果设置了上传地址则自定义图片上传事件 | ||
| 95 | onMounted(() => { | 120 | onMounted(() => { |
| 96 | - const quill = toRaw(myQuillEditor.value).getQuill(); | ||
| 97 | - if (myQuillEditor.value) { | ||
| 98 | - quill.getModule("toolbar").addHandler("image", imgHandler); | 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 | + }); | ||
| 99 | } | 131 | } |
| 100 | - toRaw(myQuillEditor.value).setHTML(props.value); | ||
| 101 | }); | 132 | }); |
| 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; | ||
| 142 | + } | ||
| 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; | ||
| 149 | + } | ||
| 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为服务器返回的图片链接地址 | ||
| 163 | + quill.insertEmbed( | ||
| 164 | + length, | ||
| 165 | + "image", | ||
| 166 | + import.meta.env.VITE_APP_BASE_API + res.fileName | ||
| 167 | + ); | ||
| 168 | + // 调整光标到最后 | ||
| 169 | + quill.setSelection(length + 1); | ||
| 170 | + } else { | ||
| 171 | + proxy.$modal.msgError("图片插入失败"); | ||
| 172 | + } | ||
| 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) => { |
-
请 注册 或 登录 后发表评论