diff --git a/package-lock.json b/package-lock.json index fa27d99..7bab9b6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,7 @@ "@js-preview/docx": "^1.6.2", "@tinymce/tinymce-vue": "^6.1.0", "@vue-office/docx": "^1.6.2", + "@vueup/vue-quill": "^1.2.0", "@vueuse/core": "^10.6.1", "axios": "^1.6.2", "element-plus": "^2.4.3", @@ -23,6 +24,7 @@ "nprogress": "^0.2.0", "pinia": "^2.1.7", "pinia-plugin-persist": "^1.0.0", + "quill": "^2.0.3", "tinymce": "^7.6.0", "vite-plugin-html": "^3.2.0", "vite-plugin-zip-file": "^2.2.0", @@ -1629,6 +1631,82 @@ "dev": true, "license": "MIT" }, + "node_modules/@vueup/vue-quill": { + "version": "1.2.0", + "resolved": "https://mirrors.huaweicloud.com/repository/npm/@vueup/vue-quill/-/vue-quill-1.2.0.tgz", + "integrity": "sha512-kd5QPSHMDpycklojPXno2Kw2JSiKMYduKYQckTm1RJoVDA557MnyUXgcuuDpry4HY/Rny9nGNcK+m3AHk94wag==", + "license": "MIT", + "dependencies": { + "quill": "^1.3.7", + "quill-delta": "^4.2.2" + }, + "peerDependencies": { + "vue": "^3.2.41" + } + }, + "node_modules/@vueup/vue-quill/node_modules/eventemitter3": { + "version": "2.0.3", + "resolved": "https://mirrors.huaweicloud.com/repository/npm/eventemitter3/-/eventemitter3-2.0.3.tgz", + "integrity": "sha512-jLN68Dx5kyFHaePoXWPsCGW5qdyZQtLYHkxkg02/Mz6g0kYpDx4FyP6XfArhQdlOC4b8Mv+EMxPo/8La7Tzghg==", + "license": "MIT" + }, + "node_modules/@vueup/vue-quill/node_modules/fast-diff": { + "version": "1.2.0", + "resolved": "https://mirrors.huaweicloud.com/repository/npm/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "license": "Apache-2.0" + }, + "node_modules/@vueup/vue-quill/node_modules/parchment": { + "version": "1.1.4", + "resolved": "https://mirrors.huaweicloud.com/repository/npm/parchment/-/parchment-1.1.4.tgz", + "integrity": "sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg==", + "license": "BSD-3-Clause" + }, + "node_modules/@vueup/vue-quill/node_modules/quill": { + "version": "1.3.7", + "resolved": "https://mirrors.huaweicloud.com/repository/npm/quill/-/quill-1.3.7.tgz", + "integrity": "sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==", + "license": "BSD-3-Clause", + "dependencies": { + "clone": "^2.1.1", + "deep-equal": "^1.0.1", + "eventemitter3": "^2.0.3", + "extend": "^3.0.2", + "parchment": "^1.1.4", + "quill-delta": "^3.6.2" + } + }, + "node_modules/@vueup/vue-quill/node_modules/quill-delta": { + "version": "4.2.2", + "resolved": "https://mirrors.huaweicloud.com/repository/npm/quill-delta/-/quill-delta-4.2.2.tgz", + "integrity": "sha512-qjbn82b/yJzOjstBgkhtBjN2TNK+ZHP/BgUQO+j6bRhWQQdmj2lH6hXG7+nwwLF41Xgn//7/83lxs9n2BkTtTg==", + "license": "MIT", + "dependencies": { + "fast-diff": "1.2.0", + "lodash.clonedeep": "^4.5.0", + "lodash.isequal": "^4.5.0" + } + }, + "node_modules/@vueup/vue-quill/node_modules/quill/node_modules/fast-diff": { + "version": "1.1.2", + "resolved": "https://mirrors.huaweicloud.com/repository/npm/fast-diff/-/fast-diff-1.1.2.tgz", + "integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==", + "license": "Apache-2.0" + }, + "node_modules/@vueup/vue-quill/node_modules/quill/node_modules/quill-delta": { + "version": "3.6.3", + "resolved": "https://mirrors.huaweicloud.com/repository/npm/quill-delta/-/quill-delta-3.6.3.tgz", + "integrity": "sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==", + "license": "MIT", + "dependencies": { + "deep-equal": "^1.0.1", + "extend": "^3.0.2", + "fast-diff": "1.1.2" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/@vueuse/core": { "version": "10.11.1", "resolved": "https://repo.huaweicloud.com/repository/npm/@vueuse/core/-/core-10.11.1.tgz", @@ -2456,9 +2534,9 @@ } }, "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://repo.huaweicloud.com/repository/npm/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "version": "1.0.0", + "resolved": "https://mirrors.huaweicloud.com/repository/npm/dunder-proto/-/dunder-proto-1.0.0.tgz", + "integrity": "sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", @@ -2692,7 +2770,7 @@ }, "node_modules/eventemitter3": { "version": "2.0.3", - "resolved": "https://repo.huaweicloud.com/repository/npm/eventemitter3/-/eventemitter3-2.0.3.tgz", + "resolved": "https://mirrors.huaweicloud.com/repository/npm/eventemitter3/-/eventemitter3-2.0.3.tgz", "integrity": "sha512-jLN68Dx5kyFHaePoXWPsCGW5qdyZQtLYHkxkg02/Mz6g0kYpDx4FyP6XfArhQdlOC4b8Mv+EMxPo/8La7Tzghg==", "license": "MIT" }, @@ -2719,7 +2797,7 @@ }, "node_modules/fast-diff": { "version": "1.1.2", - "resolved": "https://repo.huaweicloud.com/repository/npm/fast-diff/-/fast-diff-1.1.2.tgz", + "resolved": "https://mirrors.huaweicloud.com/repository/npm/fast-diff/-/fast-diff-1.1.2.tgz", "integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==", "license": "Apache-2.0" }, @@ -3551,6 +3629,18 @@ "lodash-es": "*" } }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://mirrors.huaweicloud.com/repository/npm/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "license": "MIT" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://mirrors.huaweicloud.com/repository/npm/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "license": "MIT" + }, "node_modules/lower-case": { "version": "2.0.2", "resolved": "https://repo.huaweicloud.com/repository/npm/lower-case/-/lower-case-2.0.2.tgz", @@ -3932,7 +4022,7 @@ }, "node_modules/parchment": { "version": "1.1.4", - "resolved": "https://repo.huaweicloud.com/repository/npm/parchment/-/parchment-1.1.4.tgz", + "resolved": "https://mirrors.huaweicloud.com/repository/npm/parchment/-/parchment-1.1.4.tgz", "integrity": "sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg==", "license": "BSD-3-Clause" }, @@ -4223,30 +4313,31 @@ }, "node_modules/quill": { "version": "1.3.7", - "resolved": "https://repo.huaweicloud.com/repository/npm/quill/-/quill-1.3.7.tgz", + "resolved": "https://mirrors.huaweicloud.com/repository/npm/quill/-/quill-1.3.7.tgz", "integrity": "sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==", "license": "BSD-3-Clause", "dependencies": { - "clone": "^2.1.1", - "deep-equal": "^1.0.1", - "eventemitter3": "^2.0.3", - "extend": "^3.0.2", - "parchment": "^1.1.4", - "quill-delta": "^3.6.2" + "eventemitter3": "^5.0.1", + "lodash-es": "^4.17.21", + "parchment": "^3.0.0", + "quill-delta": "^5.1.0" + }, + "engines": { + "npm": ">=8.2.3" } }, "node_modules/quill-delta": { "version": "3.6.3", - "resolved": "https://repo.huaweicloud.com/repository/npm/quill-delta/-/quill-delta-3.6.3.tgz", + "resolved": "https://mirrors.huaweicloud.com/repository/npm/quill-delta/-/quill-delta-3.6.3.tgz", "integrity": "sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==", "license": "MIT", "dependencies": { - "deep-equal": "^1.0.1", - "extend": "^3.0.2", - "fast-diff": "1.1.2" + "fast-diff": "^1.3.0", + "lodash.clonedeep": "^4.5.0", + "lodash.isequal": "^4.5.0" }, "engines": { - "node": ">=0.10" + "node": ">= 12.0.0" } }, "node_modules/read-package-json-fast": { @@ -5280,6 +5371,52 @@ "npm": ">= 3.0.0" } }, + "node_modules/vue-quill-editor/node_modules/eventemitter3": { + "version": "2.0.3", + "resolved": "https://mirrors.huaweicloud.com/repository/npm/eventemitter3/-/eventemitter3-2.0.3.tgz", + "integrity": "sha512-jLN68Dx5kyFHaePoXWPsCGW5qdyZQtLYHkxkg02/Mz6g0kYpDx4FyP6XfArhQdlOC4b8Mv+EMxPo/8La7Tzghg==", + "license": "MIT" + }, + "node_modules/vue-quill-editor/node_modules/fast-diff": { + "version": "1.1.2", + "resolved": "https://mirrors.huaweicloud.com/repository/npm/fast-diff/-/fast-diff-1.1.2.tgz", + "integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==", + "license": "Apache-2.0" + }, + "node_modules/vue-quill-editor/node_modules/parchment": { + "version": "1.1.4", + "resolved": "https://mirrors.huaweicloud.com/repository/npm/parchment/-/parchment-1.1.4.tgz", + "integrity": "sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg==", + "license": "BSD-3-Clause" + }, + "node_modules/vue-quill-editor/node_modules/quill": { + "version": "1.3.7", + "resolved": "https://mirrors.huaweicloud.com/repository/npm/quill/-/quill-1.3.7.tgz", + "integrity": "sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==", + "license": "BSD-3-Clause", + "dependencies": { + "clone": "^2.1.1", + "deep-equal": "^1.0.1", + "eventemitter3": "^2.0.3", + "extend": "^3.0.2", + "parchment": "^1.1.4", + "quill-delta": "^3.6.2" + } + }, + "node_modules/vue-quill-editor/node_modules/quill-delta": { + "version": "3.6.3", + "resolved": "https://mirrors.huaweicloud.com/repository/npm/quill-delta/-/quill-delta-3.6.3.tgz", + "integrity": "sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==", + "license": "MIT", + "dependencies": { + "deep-equal": "^1.0.1", + "extend": "^3.0.2", + "fast-diff": "1.1.2" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/vue-router": { "version": "4.5.0", "resolved": "https://repo.huaweicloud.com/repository/npm/vue-router/-/vue-router-4.5.0.tgz", diff --git a/package.json b/package.json index 09f0b38..2dfeb8b 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "@js-preview/docx": "^1.6.2", "@tinymce/tinymce-vue": "^6.1.0", "@vue-office/docx": "^1.6.2", + "@vueup/vue-quill": "^1.2.0", "@vueuse/core": "^10.6.1", "axios": "^1.6.2", "element-plus": "^2.4.3", @@ -30,6 +31,7 @@ "pinia": "^2.1.7", "pinia-plugin-persist": "^1.0.0", "tinymce": "^7.6.0", + "quill": "^2.0.3", "vite-plugin-html": "^3.2.0", "vite-plugin-zip-file": "^2.2.0", "vue": "^3.3.4", diff --git a/src/http/api/contract-manage/index.ts b/src/http/api/contract-manage/index.ts index f372b3e..b41aba4 100644 --- a/src/http/api/contract-manage/index.ts +++ b/src/http/api/contract-manage/index.ts @@ -20,4 +20,8 @@ export const delContractApi = (data: any = {}) => { // 修改状态 export const updateStatus = (data: any = {}) => { return post('/material-mall/contract/updateStatus', data) +} +//合同模板选择 +export const getContractSelectList = () => { + return get('/material-mall/contract/lisTemplate', {}) } \ No newline at end of file diff --git a/src/http/api/quickmessage/index.ts b/src/http/api/quickmessage/index.ts new file mode 100644 index 0000000..bde83f6 --- /dev/null +++ b/src/http/api/quickmessage/index.ts @@ -0,0 +1,18 @@ +import { get, post } from '../../index' + +// 新增快捷消息 +export const addMessageApi = (data: any = {}) => { + return post('/material-mall/reply/add', data) +} +// 快捷消息列表 +export const getMessageListApi = (data: any = {}) => { + return get('/material-mall/reply/list', data) +} +// 快捷消息编辑 +export const editMessageApi = (data: any = {}) => { + return post('/material-mall/reply/edit', data) +} +// 快捷消息删除 +export const delMessageApi = (data: any = {}) => { + return post('/material-mall/reply/del', data) +} diff --git a/src/main.ts b/src/main.ts index 51bfd55..067ab32 100644 --- a/src/main.ts +++ b/src/main.ts @@ -12,17 +12,17 @@ import './assets/font/iconfont.js' import ElementPlus from 'element-plus' import zhCn from 'element-plus/es/locale/lang/zh-cn' import VueQrcode from 'vue-qrcode' - +import { QuillEditor } from '@vueup/vue-quill'; +import '@vueup/vue-quill/dist/vue-quill.snow.css'; // 引入样式 import registerDirectives from 'utils/directive' const app = createApp(App) - for (const [key, component] of Object.entries(ElementPlusIconsVue)) { app.component(key, component) app.component('vue-qr-code', VueQrcode) } - +app.component('QuillEditor', QuillEditor); // 全局注册 app.use(pinia) app.use(router) diff --git a/src/router/index.ts b/src/router/index.ts index a037095..57bc92d 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -259,6 +259,17 @@ const routes: Array = [ isLogin: true }, }, + { + path: '/quickMessage', + name: 'quickMessage', + component: () => import('views/user/quickMessage/index.vue'), + meta: { + title: '快捷消息设置', + keepAlive: true, + AuthFlag: false, + isLogin: true + }, + }, { path: '/rent-termination', name: 'rent-termination', diff --git a/src/views/user/contract-manage/index.vue b/src/views/user/contract-manage/index.vue index bf8c5b0..d263e05 100644 --- a/src/views/user/contract-manage/index.vue +++ b/src/views/user/contract-manage/index.vue @@ -96,7 +96,7 @@ > - + @@ -166,41 +166,22 @@ - - - 支持格式:word.单个文件大小不能超过2M,最多可上传1张 - - - - - - -
- - - -
+ + + + +
@@ -221,7 +202,8 @@ - - 资讯信息 - - - - - - - - - - + + + - - + + @@ -287,11 +260,10 @@ import { useStore } from 'store/user' const store = useStore() import { mainStore } from 'store/main' // 引入富文本组件 -import QuillEditor from 'vue-quill-editor' -// 引入富文本组件样式 -import 'quill/dist/quill.core.css' -import 'quill/dist/quill.snow.css' -import 'quill/dist/quill.bubble.css' +import { QuillEditor } from '@vueup/vue-quill'; +import "quill/dist/quill.core.css"; +import "quill/dist/quill.snow.css"; +import "quill/dist/quill.bubble.css"; const store2 = mainStore() const isViewForm = ref(false) @@ -308,6 +280,7 @@ import { editContractApi, //修改 delContractApi, //删除 updateStatus, //修改状态 + getContractSelectList, //合同选择列表 } from 'http/api/contract-manage' import { InfoFilled, UploadFilled } from '@element-plus/icons-vue' const total = ref(0) @@ -325,6 +298,8 @@ const queryParams: any = reactive({ const addAndEditForm = ref({ id: '', contractName: '', + content:'', + contentId:'', fileInfoList: [], fileInfoTempList: [], bmFileInfoList: [], @@ -381,12 +356,35 @@ const settleinTitle = ref('') // 合同新增弹框显示隐藏 const dialogVisibleSettlein: any = ref(false) const dialogVisibleSettleinEdit: any = ref(false) +const contractList:any = ref([]) // 合同新增 -const addContract = () => { +const addContract = async() => { settleinTitle.value = '合同新建' + contractList.value = [] + const res: any = await getContractSelectList() + if(res.data.length>0 ){ + res.data.forEach((item:any) => { + contractList.value.push({ + id:item.id, + templateName:item.templateName, + content:item.content, + }) + }); + } dialogVisibleSettlein.value = true; } +const handleSelectChange = (selectedId:number) => { + console.log('111111',selectedId) + let selectedContract = '' + contractList.value.forEach((item:any) => { + if (item.id === selectedId) { + selectedContract = item.content; + } + }); + console.log('2222',selectedContract) + addAndEditForm.value.content = selectedContract; +} // 合同编辑 const onContract = (row: any) => { addAndEditForm.value.id = row.id @@ -420,16 +418,14 @@ const onFileChange = (fileList: any) => { const addAndEditFormRules = reactive({ contractName: [{ required: true, message: '请输入合同名称', trigger: 'blur' }], - fileInfoList: [{ required: true, message: '请上传合同附件', trigger: 'blur' }], + contentId: [{ required: true, message: '请选择合同模板', trigger: 'blur' }], }) // 提交 const onSubmit = () => { - addAndEditForm.value.fileInfoList = addAndEditForm.value.fileInfoTempList addAndEditFormRef.value.validate(async (valid: any) => { if (valid) { const SEN_API = settleinTitle.value === '合同修改' ? editContractApi : addContractApi - addAndEditForm.value.bmFileInfoList = addAndEditForm.value.fileInfoList const res: any = await SEN_API(addAndEditForm.value) if (res.code === 200) { ElMessage({ @@ -463,6 +459,12 @@ const onCancel = () => { const myQuillEditor = ref() +// 样式部分 +const toolbarStyle = { + width: '100%', // 与编辑工具器一样的宽度 + height: '50px', // 固定高度 +}; + // 工具栏配置 const toolbarOptions = ref([ ['bold', 'italic', 'underline', 'strike'], // 加粗 斜体 下划线 删除线 @@ -471,7 +473,7 @@ const toolbarOptions = ref([ [{ list: 'ordered' }, { list: 'bullet' }], // 有序、无序列表 [{ script: 'sub' }, { script: 'super' }], // 上标/下标 [{ indent: '-1' }, { indent: '+1' }], // 缩进 - // [{'direction': 'rtl'}], // 文本方向 +// [{'direction': 'rtl'}], // 文本方向 [{ size: ['small', false, 'large', 'huge'] }], // 字体大小 [{ header: [1, 2, 3, 4, 5, 6, false] }], // 标题 [{ color: [] }, { background: [] }], // 字体颜色、字体背景颜色 @@ -481,11 +483,11 @@ const toolbarOptions = ref([ const editorOption = ref({ // 编辑框操作事件 theme: 'snow', // or 'bubble' - placeholder: '请输入资讯内容...', + // placeholder: '请输入资讯内容...', modules: { toolbar: { container: toolbarOptions, - } + }, } }) const dataForm = ref( { @@ -503,6 +505,9 @@ onMounted(() => {