合同管理

This commit is contained in:
hongchao 2024-12-17 15:48:08 +08:00
parent 50ff159e2b
commit d3643e3d58
10 changed files with 671 additions and 97 deletions

2
env/.env.dev vendored
View File

@ -11,7 +11,7 @@ VITE_API_URL = '/proxyApi'
# VITE_proxyTarget = 'http://192.168.2.127:28080' # 梁超
# VITE_proxyTarget = 'http://36.33.26.201:17788/proxyApi' # 测试服务
# VITE_proxyTarget = 'http://192.168.0.244:28580' # 测试服务
VITE_proxyTarget = 'http://192.168.2.72:28080' # 盛旭
VITE_proxyTarget = 'http://192.168.0.110:28080' # 盛旭
# VITE_proxyTarget = 'http://10.40.92.185:9206' # 赵福海 ( 设备类型)
# VITE_proxyTarget = 'http://10.40.92.16:9502' # 牛 (个人中心 基础信息企业申请认证)

195
package-lock.json generated
View File

@ -11,6 +11,7 @@
"@element-plus/icons-vue": "^2.3.1",
"@js-preview/docx": "^1.6.2",
"@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",
@ -21,6 +22,7 @@
"nprogress": "^0.2.0",
"pinia": "^2.1.7",
"pinia-plugin-persist": "^1.0.0",
"quill": "^2.0.3",
"vite-plugin-html": "^3.2.0",
"vite-plugin-zip-file": "^2.2.0",
"vue": "^3.3.4",
@ -955,6 +957,82 @@
"integrity": "sha512-CPuIReonid9+zOG/CGTT05FXrPYATEqoDGNrEaqS4hwcw5BUNM2FguC0mOwJD4Jr16UpRVl9N0pY3P+srIbqmg==",
"dev": true
},
"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://registry.npmmirror.com/@vueuse/core/-/core-10.11.1.tgz",
@ -1642,12 +1720,12 @@
}
},
"node_modules/dunder-proto": {
"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==",
"version": "1.0.1",
"resolved": "https://mirrors.huaweicloud.com/repository/npm/dunder-proto/-/dunder-proto-1.0.1.tgz",
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
"license": "MIT",
"dependencies": {
"call-bind-apply-helpers": "^1.0.0",
"call-bind-apply-helpers": "^1.0.1",
"es-errors": "^1.3.0",
"gopd": "^1.2.0"
},
@ -1853,9 +1931,9 @@
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
},
"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==",
"version": "5.0.1",
"resolved": "https://mirrors.huaweicloud.com/repository/npm/eventemitter3/-/eventemitter3-5.0.1.tgz",
"integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==",
"license": "MIT"
},
"node_modules/extend": {
@ -1865,9 +1943,9 @@
"license": "MIT"
},
"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==",
"version": "1.3.0",
"resolved": "https://mirrors.huaweicloud.com/repository/npm/fast-diff/-/fast-diff-1.3.0.tgz",
"integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==",
"license": "Apache-2.0"
},
"node_modules/fast-glob": {
@ -2479,6 +2557,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://registry.npmmirror.com/lower-case/-/lower-case-2.0.2.tgz",
@ -2815,9 +2905,9 @@
}
},
"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==",
"version": "3.0.0",
"resolved": "https://mirrors.huaweicloud.com/repository/npm/parchment/-/parchment-3.0.0.tgz",
"integrity": "sha512-HUrJFQ/StvgmXRcQ1ftY6VEZUq3jA2t9ncFN4F84J/vN0/FPpQF+8FKXb3l6fLces6q0uOHj6NJn+2xvZnxO6A==",
"license": "BSD-3-Clause"
},
"node_modules/pascal-case": {
@ -3055,31 +3145,32 @@
]
},
"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==",
"version": "2.0.3",
"resolved": "https://mirrors.huaweicloud.com/repository/npm/quill/-/quill-2.0.3.tgz",
"integrity": "sha512-xEYQBqfYx/sfb33VJiKnSJp8ehloavImQ2A6564GAbqG55PGw1dAWUn1MUbQB62t0azawUS2CZZhWCjO8gRvTw==",
"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://mirrors.huaweicloud.com/repository/npm/quill-delta/-/quill-delta-3.6.3.tgz",
"integrity": "sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==",
"version": "5.1.0",
"resolved": "https://mirrors.huaweicloud.com/repository/npm/quill-delta/-/quill-delta-5.1.0.tgz",
"integrity": "sha512-X74oCeRI4/p0ucjb5Ma8adTXd9Scumz367kkMK5V/IatcX6A0vlgLgKbzXWy5nZmCGeNJm2oQX0d2Eqj+ZIlCA==",
"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": {
@ -3888,6 +3979,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://registry.npmmirror.com/vue-router/-/vue-router-4.5.0.tgz",

View File

@ -17,6 +17,7 @@
"@element-plus/icons-vue": "^2.3.1",
"@js-preview/docx": "^1.6.2",
"@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",
@ -27,6 +28,7 @@
"nprogress": "^0.2.0",
"pinia": "^2.1.7",
"pinia-plugin-persist": "^1.0.0",
"quill": "^2.0.3",
"vite-plugin-html": "^3.2.0",
"vite-plugin-zip-file": "^2.2.0",
"vue": "^3.3.4",

View File

@ -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', {})
}

View File

@ -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)
}

View File

@ -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)

View File

@ -259,6 +259,17 @@ const routes: Array<RouteRecordRaw> = [
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',

View File

@ -96,7 +96,7 @@
></el-switch>
</template>
</el-table-column>
<el-table-column align="center" prop="qcTime" label="合同附件">
<!-- <el-table-column align="center" prop="qcTime" label="合同附件">
<template #default="{ row }">
<a
:href="row.bmFileInfoList.length>0 ? row.bmFileInfoList[0].fileUrl:null"
@ -105,7 +105,7 @@
>查看</a
>
</template>
</el-table-column>
</el-table-column> -->
<el-table-column align="center" prop="createTime" label="创建时间" />
<el-table-column align="center" prop="updateTime" label="更新时间" />
<el-table-column align="center" label="操作" :width="220">
@ -166,41 +166,22 @@
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="1" style="margin-bottom: 0" class="upload-tip">
支持格式word.单个文件大小不能超过2M最多可上传1张
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20" >
<el-col :span="24">
<el-form-item label="附件" prop="fileInfoList">
<div style="flex: 1">
<UploadComponentNew
:maxSize="10"
:max-limit="1"
width="100%"
height="100%"
:multiple="true"
:autoUpload="true"
:minLimit="addAndEditForm.fileInfoList.length"
:actionUrl="uploadUrl"
listType="text"
:justifyContent="`flex-start`"
@onFileChange="onFileChange"
:acceptTypeList="['.doc','.docx' ]"
>
<template v-slot:default>
<!-- <el-icon size="48" color="#aaa"><Plus /></el-icon> -->
<el-button
:icon="UploadFilled"
type="primary"
class="primary-lease"
>上传文件</el-button
>
</template>
</UploadComponentNew>
</div>
<el-col :span="12">
<el-form-item label="合同模板:" prop="contentId">
<el-select
clearable
style="width: 100%"
placeholder="请选择"
v-model="addAndEditForm.contentId"
@change="handleSelectChange"
>
<el-option
:key="item.id"
:value="item.id"
:label="item.templateName"
v-for="item in contractList"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
@ -221,7 +202,8 @@
<el-dialog
v-model="dialogVisibleSettleinEdit"
:title="settleinTitle"
width="40%"
width="50%"
height="50%"
destroy-on-close
class="centered-dialog"
:close-on-click-modal="false"
@ -234,26 +216,17 @@
:model="addAndEditForm"
:rules="addAndEditFormRules"
>
<el-row style="font-weight:bold">
<el-col><span>资讯信息</span></el-col>
<el-divider></el-divider>
</el-row>
<el-row>
<el-col :span="14">
<el-form-item label="资讯标题" prop="xwbt">
<el-input v-model="dataForm.xwbt" placeholder="请输入资讯标题"></el-input>
</el-form-item>
</el-col>
<el-col :span="10">
<el-form-item label="副标题" prop="fbt">
<el-input v-model="dataForm.fbt" placeholder="请输入副标题"></el-input>
<el-col :span="12">
<el-form-item label="合同模板名称" prop="xwbt">
<el-input v-model="dataForm.xwbt" placeholder="请输入合同模板名称"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="内容" prop="nr" >
<QuillEditor v-model="dataForm.nr" class="editor" :options="editorOption" />
<el-form-item label="内容" prop="nr" class="form-item-content">
<quill-editor v-model="dataForm.nr" class="editor" :options="editorOption" ></quill-editor>
</el-form-item>
</el-col>
</el-row>
@ -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<any>({
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<any>([
['bold', 'italic', 'underline', 'strike'], // 线 线
@ -471,7 +473,7 @@ const toolbarOptions = ref<any>([
[{ 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<any>([
const editorOption = ref<any>({ //
theme: 'snow', // or 'bubble'
placeholder: '请输入资讯内容...',
// placeholder: '...',
modules: {
toolbar: {
container: toolbarOptions,
}
},
}
})
const dataForm = ref<any>( {
@ -503,6 +505,9 @@ onMounted(() => {
</script>
<style lang="scss" scoped>
:deep.editor {
height: 300px;
}
:deep.upload-tip .el-form-item__label {
color: transparent;
}

View File

@ -35,6 +35,7 @@ const allList = [
{ title: '订单管理', name: 'orderManagement', permission: ['2'] },
{ title: '收货地址管理', name: 'address-manage', permission: ['2'] },
{ title: '合同管理', name: 'contract-manage', permission: ['1'] },
{ title: '快捷消息设置', name: 'quickMessage', permission: ['1'] },
]
const menuList: any = computed(() => {
return allList.filter((e) => e.permission.includes(isType.value))

View File

@ -0,0 +1,396 @@
<template>
<!-- 寻源需求 -->
<el-form
:model="queryParams"
ref="queryFormRef"
:inline="true"
size="default"
label-width="0"
>
<!-- 表单搜索 -->
<el-row>
<el-col :span="6">
<el-form-item prop="replyTitle">
<el-input
v-model.trim="queryParams.replyTitle"
style="width: 100%"
clearable
placeholder="请输入快捷回复标题"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item prop="creater">
<el-input
v-model.trim="queryParams.creater"
style="width: 100%"
clearable
placeholder="请输入上传人"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item prop="createrTime">
<el-date-picker
v-model="createrTime"
type="daterange"
style="width: 100%"
range-separator="-"
value-format="YYYY-MM-DD"
start-placeholder="上传开始日期"
end-placeholder="上传结束日期"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item>
<el-button class="primary-lease" type="primary" @click="getMessageListData"
>查询</el-button
>
<el-button
class="primary-lease"
type="primary"
@click="onReset"
>重置</el-button
>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="18">
<el-form-item>
<el-button class="primary-lease" type="primary" @click="addContract"
>新建</el-button
>
</el-form-item>
</el-col>
</el-row>
</el-form>
<!-- 表格 -->
<el-table
:data="qualityLis"
show-overflow-tooltip
:header-cell-style="{
background: '#00a288',
color: '#fff',
}"
>
<el-table-column align="center" label="序号" type="index" width="80" />
<el-table-column align="center" prop="replyTitle" label="快捷问题" />
<el-table-column align="center" prop="replyContent" label="快捷回答" />
<el-table-column align="center" prop="nickName" label="上传人" />
<el-table-column align="center" prop="createrTime" label="创建时间" />
<el-table-column align="center" label="操作" :width="220">
<template #default="{ row }">
<el-button
size="small"
type="primary"
@click="onContract(row, false)"
>
编辑
</el-button>
<el-button
size="small"
type="danger"
@click="onDelete(row.id, true)"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<PagingComponent
@getList="getMessageListData"
:pageSize="queryParams.pageSize"
:pageNumber="queryParams.pageNum"
:total="total"
/>
<!-- 新增和修改弹框 -->
<el-dialog
v-model="dialogVisibleSettlein"
:title="settleinTitle"
width="40%"
destroy-on-close
class="centered-dialog"
:close-on-click-modal="false"
@close="onDialogClose"
>
<el-form
label-width="140px"
ref="addAndEditFormRef"
label-position="right"
:model="addAndEditForm"
:rules="addAndEditFormRules"
>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="快捷问题:" prop="replyTitle">
<el-input
autocomplete="off"
style="width: 100%"
maxlength="30"
v-model="addAndEditForm.replyTitle"
clearable
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="快捷回答:" prop="replyContent">
<el-input
autocomplete="off"
style="width: 100%"
maxlength="100"
type="textarea"
:rows="4"
v-model="addAndEditForm.replyContent"
placeholder="请输入快捷回答内容"
clearable
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" class="primary-lease" @click="onCancel"
>取消</el-button
>
<el-button class="primary-lease" type="primary" @click="onSubmit()">
提交
</el-button>
</div>
</template>
</el-dialog>
</template>
<script setup lang="ts">
import TableComponent from 'components/TableComponent/index.vue'
import FormComponent from 'components/FormComponent/index.vue'
import PagingComponent from 'components/PagingComponent/index.vue'
import UploadComponentNew from 'components/uploadComponentNew/index.vue'
import TitleTip from 'components/TitleTip/index.vue'
import uploadComponent from 'components/uploadComponent/index.vue'
import previewImg from './previewImg/index.vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import type { FormInstance } from 'element-plus'
import { ref } from 'vue'
import { useStore } from 'store/user'
const store = useStore()
import { mainStore } from 'store/main'
const store2 = mainStore()
const isViewForm = ref(false)
const isDisabled = ref(false)
const uploadUrl = import.meta.env.VITE_API_URL + '/file/upload'
const qualityLis = ref<any>([])
const queryFormRef = ref<any>(null)
import {
getMessageListApi, //
addMessageApi, //
editMessageApi, //
delMessageApi, //
} from 'http/api/quickMessage'
import { InfoFilled, UploadFilled } from '@element-plus/icons-vue'
const total = ref(0)
const createTime = ref([])
/* 查询参数 */
const queryParams: any = reactive({
replyTitle: '',
creater: '',
startTime: '',
endTime: '',
pageSize: 10,
pageNum: 1,
})
const addAndEditForm = ref<any>({
id: '',
replyTitle: '',
replyContent: '',
})
//
const getMessageListData = async () => {
if (createTime.value.length > 0) {
queryParams.startTime = createTime.value[0]
queryParams.endTime = createTime.value[1]
}
const { data: res }: any = await getMessageListApi(queryParams)
qualityLis.value = res.rows
total.value = res.total
}
//
const onReset = () => {
createTime.value = []
queryParams.startTime = ''
queryParams.endTime = ''
queryParams.pageNum = 1
queryParams.pageSize = 10
queryFormRef.value.resetFields()
getMessageListData()
}
const addAndEditFormRef = ref()
const settleinTitle = ref('')
//
const dialogVisibleSettlein: any = ref(false)
const dialogVisibleSettleinEdit: any = ref(false)
//
const addContract = () => {
settleinTitle.value = '快捷消息新建'
dialogVisibleSettlein.value = true;
}
//
const onContract = (row: any) => {
addAndEditForm.value.id = row.id
addAndEditForm.value.replyTitle = row.replyTitle
addAndEditForm.value.replyContent = row.replyContent
settleinTitle.value = '快捷消息修改'
dialogVisibleSettlein.value = true
}
const onDialogClose = () => {
addAndEditFormRef.value.resetFields()
addAndEditForm.value.id = ''
addAndEditForm.value.replyTitle = ''
addAndEditForm.value.replyContent = ''
}
//
const onSubmit = () => {
addAndEditFormRef.value.validate(async (valid: any) => {
if (valid) {
const SEN_API = settleinTitle.value === '快捷消息修改' ? editMessageApi : addMessageApi
const res: any = await SEN_API(addAndEditForm.value)
if (res.code === 200) {
ElMessage({
type: 'success',
message: '提交成功',
})
dialogVisibleSettlein.value = false
getMessageListData()
}
}
})
}
//
const onDelete = async (id: any) => {
ElMessageBox.confirm('是否确定删除?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
return delMessageApi({ id })
})
.then((res) => {
if (res.code === 200) {
ElMessage({
type: 'success',
message: '删除成功',
})
getMessageListData()
}
})
.catch(() => {})
}
//
const onCancel = () => {
dialogVisibleSettlein.value = false
}
const addAndEditFormRules = reactive({
replyTitle: [
{
required: true,
message: '请输入快捷问题',
trigger: 'blur',
},
],
replyContent: [
{
required: true,
message: '请输入快捷回答',
trigger: 'blur',
},
],
})
onMounted(() => {
getMessageListData()
})
</script>
<style lang="scss" scoped>
:deep.upload-tip .el-form-item__label {
color: transparent;
}
.el-pagination {
justify-content: flex-end;
padding: 5px 0;
}
:deep.el-pagination.is-background .el-pager li.is-active {
background-color: #3cb4a6;
}
:deep.el-form--inline .el-form-item {
margin-right: 6px;
width: 95%;
}
.img-list {
display: flex;
align-items: center;
.img-items {
width: 120px;
height: 120px;
margin-right: 8px;
position: relative;
img {
width: 100%;
height: 100%;
}
.mask-img {
visibility: hidden;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #000;
opacity: 0.5;
display: flex;
align-items: center;
justify-content: center;
.delete-icon {
font-size: 20px;
cursor: pointer;
z-index: 9;
color: #fff;
}
}
}
.img-items:hover .mask-img {
visibility: visible;
}
}
</style>