作者 xiaoqiu

优化了富文本

... ... @@ -8,4 +8,4 @@ VITE_APP_ENV = 'development'
VITE_APP_BASE_API = '/dev-api'
# 开打新的tab的url前缀
VITE_APP_TAB_URL_PREFIX = 'http://192.168.2.68:6512'
VITE_APP_TAB_URL_PREFIX = 'http://bxhd.crgx.net'
... ...
... ... @@ -11,20 +11,18 @@
## 平台简介
* 本仓库为前端技术栈 [Vue3](https://v3.cn.vuejs.org) + [Element Plus](https://element-plus.org/zh-CN) + [Vite](https://cn.vitejs.dev) 版本。
* 配套后端代码仓库地址[RuoYi-Vue](https://gitee.com/y_project/RuoYi-Vue)[RuoYi-Vue-fast](https://github.com/yangzongzhuan/RuoYi-Vue-fast) 版本。
* 前端技术栈([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)
* 阿里云折扣场:[点我进入](http://aly.ruoyi.vip),腾讯云秒杀场:[点我进入](http://txy.ruoyi.vip)  
* 阿里云优惠券:[点我领取](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)  
- 本仓库为前端技术栈 [Vue3](https://v3.cn.vuejs.org) + [Element Plus](https://element-plus.org/zh-CN) + [Vite](https://cn.vitejs.dev) 版本。
- 配套后端代码仓库地址[RuoYi-Vue](https://gitee.com/y_project/RuoYi-Vue)[RuoYi-Vue-fast](https://github.com/yangzongzhuan/RuoYi-Vue-fast) 版本。
- 前端技术栈([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)
## 前端运行
```bash
# 克隆项目
git clone https://github.com/yangzongzhuan/RuoYi-Vue3.git
git clone http://120.79.115.47:8099/xiaoming/bxhd-vue3.git
# 进入项目目录
cd RuoYi-Vue3
cd bxhd-vue3
# 安装依赖
yarn --registry=https://registry.npmmirror.com
... ... @@ -39,71 +37,13 @@ yarn dev
## 内置功能
1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。
2. 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。
3. 岗位管理:配置系统用户所属担任职务。
4. 菜单管理:配置系统菜单,操作权限,按钮权限标识等。
5. 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。
6. 字典管理:对系统中经常使用的一些较为固定的数据进行维护。
7. 参数管理:对系统动态配置常用参数。
1. 首页:数据统计。
2. 待处理保单:对用户登记的保单进行审核,通过、退回、修改、作废和分配。
3. 已处理保单:查看已处理的保单。
4. 进行中保单:查看进行中的保单。
5. 已完结保单:查看已完结的保单,并查看保单回馈。
6. 已作废保单:查看已作废保单,并查看作废备注。
7. 保单报表:对所有的数据进行统计,可查看账号下的数据,可对数据进行筛选、导出。
8. 通知公告:系统通知公告信息发布维护。
9. 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。
10. 登录日志:系统登录日志记录查询包含登录异常。
11. 在线用户:当前系统中活跃用户状态监控。
12. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。
13. 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。
14. 系统接口:根据业务代码自动生成相关的api接口文档。
15. 服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。
16. 缓存监控:对系统的缓存信息查询,命令统计等。
17. 在线构建器:拖动表单元素生成相应的HTML代码。
18. 连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。
## 在线体验
- admin/admin123
- 陆陆续续收到一些打赏,为了更好的体验已用于演示服务器升级。谢谢各位小伙伴。
演示地址:http://vue.ruoyi.vip
文档地址:http://doc.ruoyi.vip
## 演示图
<table>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/cd1f90be5f2684f4560c9519c0f2a232ee8.jpg"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/1cbcf0e6f257c7d3a063c0e3f2ff989e4b3.jpg"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-8074972883b5ba0622e13246738ebba237a.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-9f88719cdfca9af2e58b352a20e23d43b12.png"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-39bf2584ec3a529b0d5a3b70d15c9b37646.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-936ec82d1f4872e1bc980927654b6007307.png"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-b2d62ceb95d2dd9b3fbe157bb70d26001e9.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-d67451d308b7a79ad6819723396f7c3d77a.png"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/5e8c387724954459291aafd5eb52b456f53.jpg"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/644e78da53c2e92a95dfda4f76e6d117c4b.jpg"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-8370a0d02977eebf6dbf854c8450293c937.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-49003ed83f60f633e7153609a53a2b644f7.png"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-d4fe726319ece268d4746602c39cffc0621.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-c195234bbcd30be6927f037a6755e6ab69c.png"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/b6115bc8c31de52951982e509930b20684a.jpg"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-5e4daac0bb59612c5038448acbcef235e3a.png"/></td>
</tr>
</table>
## 若依前后端分离交流群
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) 点击按钮入群。
\ No newline at end of file
9. 用户管理:可添加用户登录,每个账号 id 可分配角色,可查看自己所拥有的角色。
10. 配置规则:对用户登记的保单进行规则自动分配。
... ...
<template>
<div>
<QuillEditor
ref="myQuillEditor"
theme="snow"
<el-upload
:action="uploadUrl"
:before-upload="handleBeforeUpload"
:on-success="handleUploadSuccess"
:on-error="handleUploadError"
name="file"
:show-file-list="false"
:headers="headers"
class="editor-img-uploader"
v-if="type == 'url'"
>
<i ref="uploadRef" class="editor-img-uploader"></i>
</el-upload>
</div>
<div class="editor">
<quill-editor
ref="quillEditorRef"
v-model:content="content"
:options="data.editorOption"
contentType="html"
@update:content="setValue()"
/>
<!-- 使用自定义图片上传 -->
<input
type="file"
hidden
accept=".jpg,.png"
ref="fileBtn"
@change="handleUpload"
@textChange="(e) => $emit('update:modelValue', content)"
:options="options"
:style="styles"
/>
</div>
</template>
... ... @@ -22,90 +29,232 @@
<script setup>
import { QuillEditor } from "@vueup/vue-quill";
import "@vueup/vue-quill/dist/vue-quill.snow.css";
import { reactive, onMounted, ref, toRaw, watch } from "vue";
import { uploadAvatar } from "@/api/system/user";
import { getToken } from "@/utils/auth";
const props = defineProps(["value"]);
const emit = defineEmits(["updateValue"]);
const content = ref("");
const myQuillEditor = ref();
watch(
() => props.value,
(val) => {
toRaw(myQuillEditor.value).setHTML(val);
const { proxy } = getCurrentInstance();
const quillEditorRef = ref();
const uploadUrl = ref(import.meta.env.VITE_APP_BASE_API + "/common/upload"); // 上传的图片服务器地址
const headers = ref({
Authorization: "Bearer " + getToken(),
});
const props = defineProps({
/* 编辑器的内容 */
modelValue: {
type: String,
},
{ deep: true }
);
const fileBtn = ref();
const data = reactive({
content: "",
editorOption: {
/* 高度 */
height: {
type: Number,
default: null,
},
/* 最小高度 */
minHeight: {
type: Number,
default: null,
},
/* 只读 */
readOnly: {
type: Boolean,
default: false,
},
/* 上传文件大小限制(MB) */
fileSize: {
type: Number,
default: 5,
},
/* 类型(base64格式、url格式) */
type: {
type: String,
default: "url",
},
});
const options = ref({
theme: "snow",
bounds: document.body,
debug: "warn",
modules: {
// 工具栏配置
toolbar: [
["bold", "italic", "underline", "strike"],
[{ size: ["small", false, "large", "huge"] }],
[{ font: [] }],
[{ align: [] }],
[{ list: "ordered" }, { list: "bullet" }],
[{ indent: "-1" }, { indent: "+1" }],
[{ header: 1 }, { header: 2 }],
["image"],
[{ direction: "rtl" }],
[{ color: [] }, { background: [] }],
["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"], // 链接、图片、视频
],
},
placeholder: "请输入内容...",
placeholder: "请输入内容",
readOnly: props.readOnly,
});
const styles = computed(() => {
let style = {};
if (props.minHeight) {
style.minHeight = `${props.minHeight}px`;
}
if (props.height) {
style.height = `${props.height}px`;
}
return style;
});
const content = ref("");
watch(
() => props.modelValue,
(v) => {
if (v !== content.value) {
content.value = v === undefined ? "<p></p>" : v;
}
},
{ immediate: true }
);
// 如果设置了上传地址则自定义图片上传事件
onMounted(() => {
if (props.type == "url") {
let quill = quillEditorRef.value.getQuill();
let toolbar = quill.getModule("toolbar");
toolbar.addHandler("image", (value) => {
if (value) {
proxy.$refs.uploadRef.click();
} else {
quill.format("image", false);
}
});
}
});
const imgHandler = (state) => {
if (state) {
fileBtn.value.click();
// 上传前校检格式和大小
function handleBeforeUpload(file) {
const type = ["image/jpeg", "image/jpg", "image/png", "image/svg"];
const isJPG = type.includes(file.type);
//检验文件格式
if (!isJPG) {
proxy.$modal.msgError(`图片格式错误!`);
return false;
}
};
const setValue = () => {
const text = toRaw(myQuillEditor.value).getHTML();
emit("updateValue", text);
};
const handleUpload = (e) => {
const files = Array.prototype.slice.call(e.target.files);
if (!files) {
return;
// 校检文件大小
if (props.fileSize) {
const isLt = file.size / 1024 / 1024 < props.fileSize;
if (!isLt) {
proxy.$modal.msgError(`上传文件大小不能超过 ${props.fileSize} MB!`);
return false;
}
const formdata = new FormData();
formdata.append("avatarfile", files[0]);
const quill = toRaw(myQuillEditor.value).getQuill();
const length = quill.getSelection().index;
// 调整光标到最后
quill.setSelection(length + 1);
uploadAvatar(formdata).then((res) => {
if (res.imgUrl) {
const quill = toRaw(myQuillEditor.value).getQuill();
const length = quill.getSelection().index;
// 插入图片,res为服务器返回的图片链接地址
}
return true;
}
// 上传成功处理
function handleUploadSuccess(res, file) {
// 如果上传成功
if (res.code == 200) {
// 获取富文本实例
let quill = toRaw(quillEditorRef.value).getQuill();
// 获取光标位置
let length = quill.selection.savedRange.index;
// 插入图片,res.url为服务器返回的图片链接地址
quill.insertEmbed(
length,
"image",
import.meta.env.VITE_APP_TAB_URL_PREFIX + res.imgUrl
import.meta.env.VITE_APP_BASE_API + res.fileName
);
// 调整光标到最后
quill.setSelection(length + 1);
} else {
proxy.$modal.msgError("图片插入失败");
}
});
};
onMounted(() => {
const quill = toRaw(myQuillEditor.value).getQuill();
if (myQuillEditor.value) {
quill.getModule("toolbar").addHandler("image", imgHandler);
}
toRaw(myQuillEditor.value).setHTML(props.value);
});
}
// 上传失败处理
function handleUploadError() {
proxy.$modal.msgError("图片插入失败");
}
</script>
<style scoped lang="scss">
:deep(.ql-editor) {
min-height: 180px;
<style>
.editor-img-uploader {
display: none;
}
.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: "保存";
padding-right: 0px;
}
.ql-snow .ql-tooltip[data-mode="video"]::before {
content: "请输入视频地址:";
}
.ql-snow .ql-picker.ql-size .ql-picker-label::before,
.ql-snow .ql-picker.ql-size .ql-picker-item::before {
content: "14px";
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="small"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="small"]::before {
content: "10px";
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="large"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="large"]::before {
content: "18px";
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="huge"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="huge"]::before {
content: "32px";
}
.ql-snow .ql-picker.ql-header .ql-picker-label::before,
.ql-snow .ql-picker.ql-header .ql-picker-item::before {
content: "文本";
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="1"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]::before {
content: "标题1";
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="2"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]::before {
content: "标题2";
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="3"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]::before {
content: "标题3";
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="4"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]::before {
content: "标题4";
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="5"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]::before {
content: "标题5";
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="6"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]::before {
content: "标题6";
}
.ql-snow .ql-picker.ql-font .ql-picker-label::before,
.ql-snow .ql-picker.ql-font .ql-picker-item::before {
content: "标准字体";
}
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="serif"]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="serif"]::before {
content: "衬线字体";
}
:deep(.ql-formats) {
height: 21px;
line-height: 21px;
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="monospace"]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="monospace"]::before {
content: "等宽字体";
}
</style>
... ...
... ... @@ -215,8 +215,8 @@
append-to-body
>
<QuillEditor
:value="deprecatedForm.deprecatedReason"
@updateValue="getReason"
v-model="deprecatedForm.deprecatedReason"
:min-height="192"
/>
<template #footer>
<div class="dialog-footer">
... ... @@ -327,10 +327,7 @@
<el-row>
<el-col :span="24">
<el-form-item prop="progress" label="保单回馈内容">
<QuillEditor
:value="FeedbackForm.message"
@updateValue="getMsg"
/>
<QuillEditor v-model="FeedbackForm.message" :min-height="192" />
</el-form-item>
</el-col>
</el-row>
... ... @@ -347,7 +344,11 @@
<el-dialog v-model="showIssue" title="保单信息" width="700" append-to-body>
<el-form :model="IssueForm" ref="policyRef" label-width="100px">
<el-form-item label="问题件原因" prop="progress">
<QuillEditor :value="IssueForm.deprecatedReason" />
<QuillEditor
v-model="IssueForm.deprecatedReason"
:readOnly="true"
:min-height="192"
/>
</el-form-item>
</el-form>
</el-dialog>
... ... @@ -564,8 +565,6 @@ const typeId = ref(0); // 判断类型 0 问题件 1 退回 2 作废
const transferTip = ref(""); //流转下一家名称
const transferDeptId = ref(""); // 流转的部门公司ID
const open = ref(false);
const timer = ref(null);
const timerReason = ref(null);
const form = ref({});
const timeFrame = ref(null);
const showFeedback = ref(false);
... ... @@ -715,7 +714,6 @@ const handleSuccess = (associationapprove) => {
};
// 退回保单
const handleFallback = (associationapprove) => {
clearTimeout(timerReason.value);
deprecatedForm.value = {
associationapprove,
taskId: taskId.value,
... ... @@ -727,7 +725,6 @@ const handleFallback = (associationapprove) => {
};
// 作废保单
const handleVoid = (associationapprove) => {
clearTimeout(timerReason.value);
deprecatedForm.value = {
associationapprove,
taskId: taskId.value,
... ... @@ -860,13 +857,6 @@ const submit = () => {
});
};
const getMsg = (val) => {
clearTimeout(timer.value);
timer.value = setTimeout(() => {
FeedbackForm.value.comment = val;
}, 1000);
};
// 获取流转下一家分配公司
const getTransferTip = async () => {
loadingBtn.value = true;
... ... @@ -876,13 +866,6 @@ const getTransferTip = async () => {
loadingBtn.value = false;
};
// 填写作废原因
const getReason = (val) => {
clearTimeout(timerReason.value);
timerReason.value = setTimeout(() => {
deprecatedForm.value.deprecatedReason = val;
}, 1000);
};
// 提交修改
const submitUpdate = () => {
updateCarInfo(form.value).then((response) => {
... ...
... ... @@ -209,8 +209,8 @@
append-to-body
>
<QuillEditor
:value="deprecatedForm.deprecatedReason"
@updateValue="getReason"
v-model="deprecatedForm.deprecatedReason"
:min-height="192"
/>
<template #footer>
<div class="dialog-footer">
... ... @@ -321,10 +321,7 @@
<el-row>
<el-col :span="24">
<el-form-item prop="progress" label="保单回馈内容">
<QuillEditor
:value="FeedbackForm.message"
@updateValue="getMsg"
/>
<QuillEditor v-model="FeedbackForm.message" :min-height="192" />
</el-form-item>
</el-col>
</el-row>
... ... @@ -341,7 +338,11 @@
<el-dialog v-model="showIssue" title="保单信息" width="700" append-to-body>
<el-form :model="IssueForm" ref="policyRef" label-width="100px">
<el-form-item label="问题件原因" prop="progress">
<QuillEditor :value="IssueForm.deprecatedReason" />
<QuillEditor
v-model="IssueForm.deprecatedReason"
:readOnly="true"
:min-height="192"
/>
</el-form-item>
</el-form>
</el-dialog>
... ... @@ -550,8 +551,6 @@ const typeId = ref(0); // 判断类型 0 问题件 1 退回 2 作废
const transferTip = ref(""); //流转下一家名称
const transferDeptId = ref(""); // 流转的部门公司ID
const open = ref(false);
const timer = ref(null);
const timerReason = ref(null);
const form = ref({});
const showFeedback = ref(false);
const transferShow = ref(false);
... ... @@ -713,7 +712,6 @@ const handleSuccess = (associationapprove) => {
};
// 退回保单
const handleFallback = (associationapprove) => {
clearTimeout(timerReason.value);
deprecatedForm.value = {
associationapprove,
taskId: taskId.value,
... ... @@ -725,7 +723,6 @@ const handleFallback = (associationapprove) => {
};
// 作废保单
const handleVoid = (associationapprove) => {
clearTimeout(timerReason.value);
deprecatedForm.value = {
associationapprove,
taskId: taskId.value,
... ... @@ -859,13 +856,6 @@ const submit = () => {
});
};
const getMsg = (val) => {
clearTimeout(timer.value);
timer.value = setTimeout(() => {
FeedbackForm.value.comment = val;
}, 1000);
};
// 获取流转下一家分配公司
const getTransferTip = async () => {
loadingBtn.value = true;
... ... @@ -874,14 +864,6 @@ const getTransferTip = async () => {
transferDeptId.value = data.deptId.toString();
loadingBtn.value = false;
};
// 填写作废原因
const getReason = (val) => {
clearTimeout(timerReason.value);
timerReason.value = setTimeout(() => {
deprecatedForm.value.deprecatedReason = val;
}, 1000);
};
// 提交修改
const submitUpdate = () => {
updateCarInfo(form.value).then((response) => {
... ...
... ... @@ -360,7 +360,11 @@
</el-col>
</el-row>
<el-form-item :label="labelTitle" prop="progress">
<QuillEditor :value="form.comment" @updateValue="getMsg" />
<QuillEditor
v-model="form.comment"
:readOnly="true"
:min-height="192"
/>
</el-form-item>
</el-form>
<template #footer>
... ... @@ -583,10 +587,6 @@ const queryRemark = async (row) => {
}
};
const getMsg = (val) => {
form.value.comment = val;
};
/** 搜索按钮操作 */
function handleQuery() {
queryParams.pageNum = 1;
... ...
... ... @@ -354,7 +354,11 @@
</el-col>
</el-row>
<el-form-item :label="labelTitle" prop="progress">
<QuillEditor :value="form.comment" @updateValue="getMsg" />
<QuillEditor
v-model="form.comment"
:readOnly="true"
:min-height="192"
/>
</el-form-item>
</el-form>
<template #footer>
... ... @@ -577,10 +581,6 @@ const queryRemark = async (row) => {
}
};
const getMsg = (val) => {
form.value.comment = val;
};
/** 搜索按钮操作 */
function handleQuery() {
queryParams.pageNum = 1;
... ...
... ... @@ -207,7 +207,7 @@
</el-col>
<el-col :span="24">
<el-form-item label="内容">
<QuillEditor :value="form.noticeContent" @updateValue="getMsg" />
<QuillEditor v-model="form.noticeContent" :min-height="192" />
</el-form-item>
</el-col>
</el-row>
... ... @@ -325,12 +325,6 @@ function handleUpdate(row) {
title.value = "修改公告";
});
}
const getMsg = (val) => {
clearTimeout(timer.value);
timer.value = setTimeout(() => {
form.value.noticeContent = val;
}, 1000);
};
/** 提交按钮 */
function submitForm() {
proxy.$refs["noticeRef"].validate((valid) => {
... ...