From f7f98ee72383f8310cdb5ff630663bf89bcb34a5 Mon Sep 17 00:00:00 2001 From: pan <380711010@qq.com> Date: Thu, 5 Sep 2024 21:23:42 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E5=B7=A5=E5=85=B7=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E7=8B=AC=E7=AB=8B=E5=A4=84=E7=90=86=202=E3=80=81=E6=96=87?= =?UTF-8?q?=E6=A1=A3=E8=B5=84=E6=BA=90=E7=AE=A1=E7=90=86=E8=B0=83=E6=95=B4?= =?UTF-8?q?=EF=BC=9A=E6=89=B9=E9=87=8F=E5=AF=BC=E5=87=BA=E3=80=81=E6=96=87?= =?UTF-8?q?=E6=A1=A3=E8=B5=84=E6=BA=90=E7=AE=A1=E7=90=86=E5=85=B3=E8=81=94?= =?UTF-8?q?=E9=99=84=E4=BB=B6=E7=8B=AC=E7=AB=8B=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 21 +- src/api/document/document.js | 4 +- src/api/tool/tool.js | 4 +- .../FileUpload/optimizeToolUpload.vue | 2 +- src/components/PreviewUtil/previewUtil.vue | 232 ++++++++++++ .../user-selector/src/user-selector.vue | 9 +- src/main.js | 19 + src/views/document/downloadFileDetail.vue | 148 ++++++++ src/views/document/editDocument.vue | 340 +++++++++++++----- src/views/document/index.vue | 160 +++++++-- src/views/tool/downloadFileDetail.vue | 224 ++---------- src/views/tool/index.vue | 143 +++++++- src/views/tool/toolDetail.vue | 36 +- .../workflowList/addWorkflow/tool_release.vue | 32 +- .../workflowList/addWorkflow/use_apply.vue | 1 + 15 files changed, 1014 insertions(+), 361 deletions(-) create mode 100644 src/components/PreviewUtil/previewUtil.vue create mode 100644 src/views/document/downloadFileDetail.vue diff --git a/package.json b/package.json index e59a278..7067494 100644 --- a/package.json +++ b/package.json @@ -32,36 +32,42 @@ ], "dependencies": { "@riophae/vue-treeselect": "0.4.0", + "@vue-office/docx": "1.6.1", + "@vue-office/pdf": "1.6.5", "axios": "0.24.0", "clipboard": "2.0.8", "core-js": "3.37.1", + "docxtemplater": "3.50.0", + "docxtemplater-image-module-free": "1.1.1", "echarts": "5.4.0", "element-ui": "2.15.14", + "file-save": "0.2.0", "file-saver": "2.0.5", "fuse.js": "6.4.3", "highlight.js": "9.18.5", "js-base64": "^3.7.7", "js-cookie": "3.0.1", "jsencrypt": "3.0.0-rc.1", + "jszip": "3.10.1", + "jszip-utils": "0.1.0", "nprogress": "0.2.0", + "pizzip": "3.1.7", "quill": "1.3.7", "screenfull": "5.0.2", "sockjs-client": "^1.6.1", "sortablejs": "1.10.2", + "v-viewer": "1.6.4", "vue": "2.6.12", "vue-count-to": "1.0.13", "vue-cropper": "0.5.5", + "vue-demi": "^0.14.10", "vue-iframe": "0.0.0", + "vue-json-viewer": "2.2.22", "vue-meta": "2.4.0", "vue-router": "3.4.9", + "vue-video-player": "5.0.1", "vuex": "3.6.0", - "websocket": "^1.0.35", - "jszip": "3.10.1", - "jszip-utils": "0.1.0", - "file-save": "0.2.0", - "pizzip": "3.1.7", - "docxtemplater": "3.50.0", - "docxtemplater-image-module-free": "1.1.1" + "websocket": "^1.0.35" }, "devDependencies": { "@vue/cli-plugin-babel": "4.4.6", @@ -80,6 +86,7 @@ "sass-loader": "10.1.1", "script-ext-html-webpack-plugin": "2.1.5", "svg-sprite-loader": "5.1.1", + "@vue/composition-api": "1.7.2", "vue-template-compiler": "2.6.12" }, "engines": { diff --git a/src/api/document/document.js b/src/api/document/document.js index 65ca21b..5974d65 100644 --- a/src/api/document/document.js +++ b/src/api/document/document.js @@ -65,9 +65,9 @@ export function getStatistics(query) { // 查询【请填写功能名称】列表 -export function listAllDoc(query) { +export function getExportWordList(query) { return request({ - url: '/document/all/list', + url: '/document/export/word/list', method: 'get', params: query }) diff --git a/src/api/tool/tool.js b/src/api/tool/tool.js index 5fde9c7..9cc30f0 100644 --- a/src/api/tool/tool.js +++ b/src/api/tool/tool.js @@ -74,7 +74,7 @@ export function getStatistics(query) { export function exportWordList(query) { return request({ url: '/tool/export/word/list', - method: 'get', - params: query + method: 'post', + data: query }) } diff --git a/src/components/FileUpload/optimizeToolUpload.vue b/src/components/FileUpload/optimizeToolUpload.vue index 6429d53..4c51a22 100644 --- a/src/components/FileUpload/optimizeToolUpload.vue +++ b/src/components/FileUpload/optimizeToolUpload.vue @@ -339,7 +339,7 @@ export default { const data = { fileName: file.name, fileSize: file.size, - fileUrl: res.data.filePath, + fileUrl: res.data.url, filePath: res.data.filePath, fileOldName: res.data.originalFilename, fileNewName: res.data.newFileName, diff --git a/src/components/PreviewUtil/previewUtil.vue b/src/components/PreviewUtil/previewUtil.vue new file mode 100644 index 0000000..b5a18dc --- /dev/null +++ b/src/components/PreviewUtil/previewUtil.vue @@ -0,0 +1,232 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/components/user-selector/src/user-selector.vue b/src/components/user-selector/src/user-selector.vue index dbf3109..208ef3a 100644 --- a/src/components/user-selector/src/user-selector.vue +++ b/src/components/user-selector/src/user-selector.vue @@ -6,6 +6,9 @@ :width="width || '900px'" :height="height || '650px'" :before-close="handleClose" + :show-close="false" + :close-on-press-escape="false" + :close-on-click-modal="false" append-to-body > @@ -230,11 +233,7 @@ }, methods: { handleClose(done) { - this.$confirm('确认关闭?') - .then(_ => { - this.cancel(); - }) - .catch(_ => {}); + this.cancel(); }, handleClick(tab, event) { console.log(tab, event); diff --git a/src/main.js b/src/main.js index 4a5b32b..f6ac096 100644 --- a/src/main.js +++ b/src/main.js @@ -42,6 +42,15 @@ import DictData from '@/components/DictData' // 图形监控组件 import MonitorDrawer from "@/components/MonitorDrawer" +//引入VueOfficeDocx组件 +import VueOfficeDocx from '@vue-office/docx' +//引入相关样式 +import '@vue-office/docx/lib/index.css' +import VueOfficePdf from '@vue-office/pdf' +//视频组件 +import 'video.js/dist/video-js.css' +import 'vue-video-player/src/custom-theme.css' + // 全局方法挂载 Vue.prototype.getDicts = getDicts Vue.prototype.getConfigKey = getConfigKey @@ -52,6 +61,9 @@ Vue.prototype.selectDictLabel = selectDictLabel Vue.prototype.selectDictLabels = selectDictLabels Vue.prototype.download = download Vue.prototype.handleTree = handleTree +import 'viewerjs/dist/viewer.css' +import Viewer from 'v-viewer' + // 全局组件挂载 Vue.component('DictTag', DictTag) @@ -62,7 +74,14 @@ Vue.component('FileUpload', FileUpload) Vue.component('ImageUpload', ImageUpload) Vue.component('ImagePreview', ImagePreview) Vue.component('MonitorDrawer', MonitorDrawer) +Vue.component('VueOfficeDocx', VueOfficeDocx) +Vue.component('VueOfficePdf', VueOfficePdf) +Vue.use(Viewer, { + defaultOptions: { + zIndex: 9999 + } +}) Vue.use(directive) Vue.use(plugins) Vue.use(VueMeta) diff --git a/src/views/document/downloadFileDetail.vue b/src/views/document/downloadFileDetail.vue new file mode 100644 index 0000000..63027ba --- /dev/null +++ b/src/views/document/downloadFileDetail.vue @@ -0,0 +1,148 @@ + + + + + + + + + + {{ parseTime(scope.row.createDate) }} + + + + + 预览 + 下载 + + + + + + + + + + + + + + + diff --git a/src/views/document/editDocument.vue b/src/views/document/editDocument.vue index 0860683..bb9c9c8 100644 --- a/src/views/document/editDocument.vue +++ b/src/views/document/editDocument.vue @@ -57,7 +57,23 @@ - + + + {{form.docPrincipalsName}} + + + + + + + + + {{userInfo.dept.deptName}} + + + + + + {{form.remark}} @@ -120,6 +123,58 @@ + + + + 关联附件 + + + + + + + + + + + + + + + + 预览 + 删除 + 下载 + + + + @@ -174,27 +229,33 @@ + + + + diff --git a/src/views/document/index.vue b/src/views/document/index.vue index ed37fd8..46bb70a 100644 --- a/src/views/document/index.vue +++ b/src/views/document/index.vue @@ -115,10 +115,12 @@ 发布 批量删除 导出 + 批量导出 + - + @@ -126,14 +128,14 @@ · - + - + @@ -153,14 +155,14 @@ - 预览 + >预览--> 下载 @@ -226,24 +228,27 @@ - - - - - + {{docTitle}} - 确 定 + 确 定 取 消 + + 关 闭 + - + @@ -269,8 +274,7 @@ 负责人 归属单位 文档来源 - 关联工具 - 上传状态 + 文档状态 创建时间 @@ -284,27 +288,38 @@ + + + + 文档附件下载 + + 关 闭 + + + + + + diff --git a/src/views/tool/index.vue b/src/views/tool/index.vue index 8f14b3c..1cd05cd 100644 --- a/src/views/tool/index.vue +++ b/src/views/tool/index.vue @@ -91,9 +91,10 @@ >工具发布 批量删除 导出 + 批量导出 - - + + @@ -113,14 +114,38 @@ - + + + + + + + + + + {{ assItem.toolName }} + + + + + + 引用工具 ({{ scope.row.relationToolList.length }}) + + + + {{ parseTime(scope.row.createTime) }} @@ -130,7 +155,7 @@ label="操作" align="center" fixed="right" - width="250" + width="270px" class-name="small-padding fixed-width" > @@ -159,7 +184,7 @@ - + @@ -203,9 +228,6 @@ - - - - + - 工具名称 + {{toolTitle}} + + 关 闭 + @@ -232,15 +259,20 @@ - + - 工具下载 + 工具附件下载 + + 关 闭 + + @@ -255,6 +287,7 @@ import downloadFileDetail from "./downloadFileDetail.vue"; import AddDoc from './AddDoc' import mainComponent from "@/components/mainComponent/index.vue"; import { exportDocx } from '@/utils/docUtil/docutil.js'; +import { addCount } from "@/api/tool/downloadCount"; export default { name: "User", @@ -369,6 +402,12 @@ export default { label: 'word' } ], + //详情名称 + toolTitle:'', + exportTitle:'', + batchExportFlag: false, + selectedRows: [], // 保存所有选中的数据 + }; }, watch: { @@ -512,9 +551,10 @@ export default { this.detailDrawerOpen = true this.detailOpen = true this.toolDetail = row + this.toolTitle = '工具详情' } else { let status = row.recordStatus === 'draft' ? '1' : '0' - this.handleOpen({type:'tool_release', procInstId:row.procInstId, status:status}) + this.handleOpen({type:'tool_release', procInstId:row.procInstId, status:status, title: '工具发布'}) } }, handleFileDownload(row){ @@ -551,11 +591,27 @@ export default { let _this = this _this.handleOpen({type:'tool_release',procInstId:row.procInstId,status:'1'}) }, - /** 发布按钮操作 */ + /** 导出 */ handleOpenExport() { if (this.checkList.length<1) { this.checkList = JSON.parse(JSON.stringify(this.columnList)) } + this.exportTitle = '导出' + this.batchExportFlag = false + this.exoportDrawerOpen = true + }, + /** 批量导出 */ + handleOpenBatchExport() { + let self = this + if(self.selection == null || self.selection == '' || self.selection == undefined || self.selection.length <= 0){ + this.$modal.msgError(`最少选择一条数据`); + return; + } + if (this.checkList.length<1) { + this.checkList = JSON.parse(JSON.stringify(this.columnList)) + } + this.exportTitle = '批量导出' + this.batchExportFlag = true this.exoportDrawerOpen = true }, /** 导出按钮操作 */ @@ -563,17 +619,36 @@ export default { let self = this if (this.statevalue == 1) { let excludeFields = this.columnList.filter(item=>!this.checkList.includes(item)) - this.download('/tool/export', { + let params = { ...this.queryParams, downloadCheck:false, excludeFields:excludeFields, - }, `工具信息数据_${new Date().getTime()}.xlsx`) + } + if(this.batchExportFlag){ + params = { + downloadCheck:false, + toolIdList: self.selection.map(item=>item.toolId), + excludeFields:excludeFields, + } + } + this.download('/tool/export',params, `工具信息数据_${new Date().getTime()}.xlsx`) setTimeout(() => { + if(self.batchExportFlag){ + self.clearSelected() + } self.exoportDrawerOpen = false; }, 1000); } if (this.statevalue == 2) { - exportWordList(this.queryParams).then(r => { + let params = { + ...this.queryParams + } + if(this.batchExportFlag){ + params = { + toolIdList: self.selection.map(item=>item.toolId) + } + } + exportWordList(params).then(r => { if (r.data.length != 0) { const data = { form: null, @@ -582,6 +657,9 @@ export default { //模板文件位置在public文件夹里N exportDocx('tool.docx', data, `tool.docx`) setTimeout(() => { + if(self.batchExportFlag){ + self.clearSelected() + } self.exoportDrawerOpen = false; }, 1000); } else { @@ -590,6 +668,7 @@ export default { }) } + }, // 文件上传中处理 handleFileUploadProgress(event, file, fileList) { @@ -617,6 +696,18 @@ export default { this.$modal.msgError(`最少选择一条数据`); return } + //只能删除草稿数据 + let delFlag = false; + for(let item of list){ + if(!(item.recordStatus == 'draft')){ + delFlag = true; + } + } + if(delFlag){ + this.$modal.msgError(`只能删除流程状态为[拟稿]数据,请重新选择`); + return + } + _this.$modal.confirm('删除后,该流程待办任务将会被删除,请谨慎操作。是否确认执行?') .then(async() => { _this.loading = true @@ -680,9 +771,27 @@ export default { return true } }, + clearSelected() { + // 清空选中的tab + this.$refs.tableRef.clearSelection(); + }, onPopoverShow(list) { this.relationToolList = list; // 更新要显示的工具列表 }, + /* handlePageChange(page) { + this.$nextTick(() => { + this.restoreSelection(); + }); + }, + // 根据保存的选中数据,恢复选中状态 + restoreSelection() { + this.$refs.tableRef.clearSelection(); + this.toolList.forEach(row => { + if (this.selectedRows.some(selected => selected.toolId == row.toolId)) { + this.$refs.tableRef.toggleRowSelection(row, true); + } + }); + }, */ } }; diff --git a/src/views/tool/toolDetail.vue b/src/views/tool/toolDetail.vue index 7f7dbc0..631e9dd 100644 --- a/src/views/tool/toolDetail.vue +++ b/src/views/tool/toolDetail.vue @@ -19,7 +19,7 @@ {{detailData.operateExplain}} {{detailData.remark}} - + {{tag.toolName}} @@ -121,6 +121,8 @@ + + @@ -138,10 +140,15 @@ import iFrame from "@/components/iFrame/index" import { addCount } from "@/api/tool/downloadCount"; import { listAttachment } from "@/api/attachment/attachment"; + import axios from 'axios' + import { + getToken + } from "@/utils/auth"; + import previewUtil from '@/components/PreviewUtil/previewUtil.vue' export default { name: 'toolDetail', - components: { editDocument, AddDoc, iFrame }, + components: { editDocument, AddDoc, iFrame, previewUtil }, dicts:['sys_normal_disable','tool_type','tool_source','tool_status','doc_class','doc_source'], props: { toolDetail: { @@ -177,6 +184,20 @@ //详细数据 detailData:{}, attFileType: "zip,rar,7z", + // json + dialogVisible:false, + isJson:false, + resultContentObj:[], + // docx + isDocx:false, + docxData: null, + //pdf文件 + isPdf:false, + pdfFileData: null, // 默认文档类型 + previewLoading:false, + previewUseFront: "txt,doc,docx,pdf", + isPreviewDisable: false + } }, created(){ @@ -210,9 +231,14 @@ this.getAttachmentList() }, handlePreview(row){ - this.previewUrl = process.env.VUE_APP_TOOL_TECH_FILE_VIEW_API + '/onlinePreview?url=' + encodeURIComponent(Base64.encode(process.env.VUE_APP_BASE_API + row.docUrl)); - this.viewDialogTitle = '文档在线预览' - this.viewDialogOpen = true; + this.isPreviewDisable = true + this.$nextTick(() => { + this.$refs.previewForm.frontModulePreview(row) + }) + }, + /** 关闭预览 **/ + previewClose(){ + this.isPreviewDisable = false }, /** 删除按钮操作 */ handleDelete(row) { diff --git a/src/views/workflowList/addWorkflow/tool_release.vue b/src/views/workflowList/addWorkflow/tool_release.vue index 21b703c..2a26221 100644 --- a/src/views/workflowList/addWorkflow/tool_release.vue +++ b/src/views/workflowList/addWorkflow/tool_release.vue @@ -2,7 +2,7 @@ - 工具发布 + {{title}} 流程监控 @@ -191,7 +191,7 @@ - + + @@ -325,9 +327,9 @@ import { addUser, deptTreeSelect, updateUser } from '@/api/system/user' import { addTool, checkToolExist, getInfoByBpmcId, updateTool } from '@/api/tool/tool' import blUserSelector from '@/components/user-selector/src/user-selector.vue' import ToolSelector from '@/components/tool-selector/index.vue' -import { Base64 } from 'js-base64' import uploadVue from '@/components/FileUpload/optimizeToolUpload.vue' import { addCount } from "@/api/tool/downloadCount"; +import previewUtil from '@/components/PreviewUtil/previewUtil.vue' // PDF本地文件预览 export default { @@ -339,7 +341,8 @@ export default { WorkflowLogs, processcode, iFrame, - uploadVue + uploadVue, + previewUtil }, name: "Borrow_doc", props: ['data'], @@ -458,6 +461,8 @@ export default { detailBoolean: false, attachmentList: [], attFileType: "zip,rar,7z", + isPreviewDisable: false, + title: '工具发布' }; }, computed: {}, @@ -472,6 +477,9 @@ export default { this.curDeptId = this.$store.getters.userInfo.deptId this.curDeptName = this.$store.getters.userInfo.dept.deptName if (this.data) { + if(this.data.title){ + this.title = this.data.title + } this.init(this.data) } this.getConfigKey("sys.user.initPassword").then(response => { @@ -927,12 +935,14 @@ export default { return extension; }, handlePreview(row){ - this.viewDialogOpen = true; - this.viewDialogTitle = '文档在线预览' - let protocol = window.location.protocol - let hostname = window.location.hostname; - let getDocUrl = protocol + '//' + hostname + ':8080' + process.env.VUE_APP_BASE_API - this.previewUrl = process.env.VUE_APP_TOOL_TECH_FILE_VIEW_API + '/onlinePreview?url=' + encodeURIComponent(Base64.encode(getDocUrl + row.docUrl)); + this.isPreviewDisable = true + this.$nextTick(() => { + this.$refs.previewForm.frontModulePreview(row) + }) + }, + /** 关闭预览 **/ + previewClose(){ + this.isPreviewDisable = false }, /** * 处理下载 diff --git a/src/views/workflowList/addWorkflow/use_apply.vue b/src/views/workflowList/addWorkflow/use_apply.vue index 372c412..7d60149 100644 --- a/src/views/workflowList/addWorkflow/use_apply.vue +++ b/src/views/workflowList/addWorkflow/use_apply.vue @@ -145,6 +145,7 @@ v-loading = flowStepLoading :close-on-click-modal="false" :close-on-press-escape="false" + :show-close="false" >
工具发布
{{title}}