Browse Source

门类-流程/预览

master
xuhuajiao 11 months ago
parent
commit
b0458c51a3
  1. 17
      package.json
  2. 10
      src/api/system/flowable.js
  3. 20
      src/api/system/job.js
  4. 1
      src/vendors/pdf/PdfView.vue
  5. 35
      src/vendors/xlsx/Table.vue
  6. 8
      src/vendors/xlsx/index.js
  7. 14
      src/views/preview/index.vue
  8. 88
      src/views/system/archivesCategory/processManage/module/form.vue

17
package.json

@ -28,14 +28,16 @@
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6",
"@babel/plugin-proposal-optional-chaining": "^7.18.9",
"@handsontable/vue": "^14.1.0",
"@riophae/vue-treeselect": "^0.4.0",
"@lapo/asn1js": "^1.2.1",
"@pdf-lib/fontkit": "^1.1.1",
"@riophae/vue-treeselect": "^0.4.0",
"@vue-office/docx": "^1.6.0",
"@vue-office/excel": "^1.6.5",
"axios": "^0.21.1",
"chokidar": "^3.5.3",
"clipboard": "2.0.4",
"codemirror": "^5.49.2",
"connect": "3.6.6",
"chokidar": "^3.5.3",
"core-js": "^3.6.5",
"d3": "^4.12.0",
"dimple": "git+https://github.com/PMSI-AlignAlytics/dimple.git#2.3.0",
@ -43,8 +45,8 @@
"echarts": "^4.2.1",
"echarts-gl": "^1.1.1",
"echarts-wordcloud": "^1.1.3",
"element-ui": "^2.15.6",
"element-resize-detector": "^1.2.4",
"element-ui": "^2.15.6",
"exceljs": "^4.4.0",
"file-saver": "^1.3.8",
"fuse.js": "3.4.4",
@ -54,17 +56,17 @@
"jquery": "^3.2.1",
"js-beautify": "^1.10.2",
"js-cookie": "2.2.0",
"jsencrypt": "^3.0.0-rc.1",
"js-md5": "^0.7.3",
"js-sha1": "^0.6.0",
"jsencrypt": "^3.0.0-rc.1",
"jsrsasign": "^10.3.0",
"jszip": "^3.7.0",
"jszip-utils": "^0.1.0",
"mavon-editor": "^2.9.1",
"normalize.css": "7.0.0",
"nprogress": "0.2.0",
"path-to-regexp": "2.4.0",
"ofd-xml-parser": "^0.0.2",
"path-to-regexp": "2.4.0",
"pdf-lib": "^1.17.1",
"pdfdist-mergeofd": "^2.2.228",
"pdfjs-dist": "^2.12.313",
@ -73,17 +75,19 @@
"quill": "^1.3.7",
"quill-image-resize-module": "^3.0.0",
"screenfull": "4.2.0",
"sm-crypto": "^0.3.2",
"sortablejs": "1.8.4",
"spark-md5": "^3.0.2",
"sm-crypto": "^0.3.2",
"v-viewer": "^1.6.4",
"vkbeautify": "^0.99.3",
"vue": "^2.6.14",
"vue-count-to": "^1.0.13",
"vue-cropper": "0.4.9",
"vue-demi": "^0.14.7",
"vue-echarts": "^5.0.0-beta.0",
"vue-highlightjs": "^1.3.3",
"vue-image-crop-upload": "^2.5.0",
"vue-print-nb": "^1.7.5",
"vue-quill-editor": "^3.0.6",
"vue-resource": "^1.5.3",
"vue-router": "3.0.2",
@ -92,7 +96,6 @@
"vuedraggable": "2.20.0",
"vuex": "3.1.0",
"wangeditor": "^4.7.11",
"vue-print-nb": "^1.7.5",
"web-streams-polyfill": "^3.1.0",
"x2js": "^3.4.0",
"xlsx": "^0.17.4"

10
src/api/system/flowable.js

@ -80,4 +80,12 @@ export function FetchTaskByProcinstId(params) {
})
}
export default { FetchInitFlowAll, FetchFlowList, FetchDeloy, FetchSuspendActivate, FetchAllByKey, FetchLeadingOutModelXml, FetchFindFolwImgByModelId, FetchTaskByProcinstId }
// 根据部署id获取用户操作模块
export function FetchUserTaskAllByDeployId(params) {
return request({
url: 'api/flowable/getUserTaskAllByDeployId',
method: 'get',
params
})
}
export default { FetchInitFlowAll, FetchFlowList, FetchDeloy, FetchSuspendActivate, FetchAllByKey, FetchLeadingOutModelXml, FetchFindFolwImgByModelId, FetchTaskByProcinstId, FetchUserTaskAllByDeployId }

20
src/api/system/job.js

@ -37,4 +37,22 @@ export function edit(data) {
})
}
export default { add, edit, del }
// 获取全部岗位
export function FetchPostAll(params) {
return request({
url: 'api/posts/getPostAll',
method: 'get',
params
})
}
// 根据岗位查询用户信息
export function FetchFindUserByPost(params) {
return request({
url: 'api/posts/findUserByPost',
method: 'get',
params
})
}
export default { add, edit, del, FetchPostAll, FetchFindUserByPost }

1
src/vendors/pdf/PdfView.vue

@ -94,6 +94,7 @@ export default {
pdfDoc.registerFontkit(fontkit) // fontkit
const customFont = await pdfDoc.embedFont(fontBytes)
const pages = pdfDoc.getPages()
console.log('pages',pages)
// let canvas = document.createElement('canvas')
// const png = canvas.toDataURL('img/png')

35
src/vendors/xlsx/Table.vue

@ -1,6 +1,11 @@
<template>
<div>
<div>
<vue-office-excel
class="docx-calss"
:src="buffer"
@rendered="renderedHandler"
/>
<!-- <div>
<hot-table ref="table" :settings="hotSettings"></hot-table>
</div>
<div class="btn-group">
@ -13,11 +18,15 @@
>
{{ sheet.name }}
</button>
</div>
</div> -->
</div>
</template>
<script>
// VueOfficeExcel
import VueOfficeExcel from '@vue-office/excel'
//
import '@vue-office/excel/lib/index.css'
import { HotTable } from "@handsontable/vue";
import Handsontable from "handsontable";
import { registerLanguageDictionary, zhCN } from "handsontable/i18n";
@ -35,8 +44,9 @@ export default {
props: {
msg: String,
workbook: Object,
buffer:Object
},
components: { HotTable },
components: { HotTable,VueOfficeExcel },
data() {
return {
sheetIndex: 0,
@ -44,6 +54,7 @@ export default {
style: {},
ranges: [],
},
src: '',
};
},
created() {
@ -249,7 +260,14 @@ export default {
});
},
},
mounted(){
console.log(this.buffer)
// this.src =
},
methods: {
renderedHandler() {
console.log('渲染完成')
},
hotTable() {
return this.$refs.table.hotInstance;
},
@ -334,14 +352,17 @@ export default {
</script>
<style>
.handsontable {
/* .handsontable {
font-size: 13px;
color: #222;
}
} */
</style>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
.sheet-btn.active {
.docx-calss {
height: calc(100vh - 55px);
}
/* .sheet-btn.active {
background-color: aquamarine;
}
@ -355,5 +376,5 @@ export default {
.table-tool {
padding: 8px 0;
border-top: 1px solid black;
}
} */
</style>

8
src/vendors/xlsx/index.js

@ -7,14 +7,14 @@ import "handsontable/dist/handsontable.full.min.css";
* 渲染excel
*/
export default async function render(buffer, target) {
console.log('xslx',buffer);
const workbook = await new ExcelJS.Workbook().xlsx.load(buffer);
console.log(workbook, "workbook");
console.log('buffer',buffer)
console.log('target',target)
// const workbook = await new ExcelJS.Workbook().xlsx.load(buffer);
return new Vue({
render: (h) =>
h(Table, {
props: {
workbook,
buffer,
},
}),
}).$mount(target);

14
src/views/preview/index.vue

@ -42,6 +42,8 @@ import printJS from 'print-js'
export default {
name: 'Preview',
components: {
},
props: {
msg: {
type: String,
@ -50,6 +52,7 @@ export default {
},
data() {
return {
src: '',
logo: require('../../assets/images/logo.png'),
//
loading: false,
@ -122,6 +125,15 @@ export default {
try {
clearTimeout(this.timer)
const [file] = e.target.files
const fileReader = new FileReader()
fileReader.readAsArrayBuffer(file)
console.log('fileReader', fileReader)
fileReader.onload = () => {
this.src = fileReader.result
console.log('fileReader22', fileReader.result)
}
const arrayBuffer = await readBuffer(file)
this.last = await this.displayResult(arrayBuffer, file)
@ -243,8 +255,6 @@ export default {
text-align: center;
align-items: center;
color: #000;
.top-left{
}
.top-middle{
flex:1;
text-align: center;

88
src/views/system/archivesCategory/processManage/module/form.vue

@ -1,5 +1,5 @@
<template>
<el-dialog class="process-dialog" :visible.sync="cuDialogVisible" :close-on-click-modal="false" :modal-append-to-body="false" append-to-body title="工作流选择">
<el-dialog class="process-dialog" :visible.sync="cuDialogVisible" :close-on-click-modal="false" :modal-append-to-body="false" append-to-body title="工作流选择" :before-close="handleCloseDialog">
<div class="setting-dialog">
<el-form ref="form" class="process-form" inline :model="form" :rules="rules" size="small" label-width="80px">
<div class="process-template">
@ -26,18 +26,18 @@
<div class="process-task">
<div class="task-tip">任务需指定执行岗位当流程进行到该任务时指定岗位下同一全宗的管理员可进入流程操作</div>
<div class="task-list">
<div class="task-item">
<p>任务1任务名称</p>
<el-form-item label="执行岗位" prop="task01">
<el-select v-model="form.task01" @change="selectJob">
<el-option v-for="item in jobOptions" :key="item.value" :label="item.label" :value="item.label" />
<div v-for="(task,index) in taskList" :key="index" class="task-item">
<p>任务{{ index+1 }} {{ task.nodeName }}</p>
<el-form-item label="执行岗位" :prop="`task${index+1}`" :rules="dynamicRules(index)">
<el-select v-model="form[`task${index+1}`]" @change="selectJob($event,index)">
<el-option v-for="item in jobOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<div v-if="form.task01" class="detail-arrow" @click="isExpend = !isExpend"><i :class="['iconfont icon-xiala', isExpend ? 'arrow-up':'']" /></div>
<div v-if="form[`task${index+1}`]" class="detail-arrow" @click="task.isExpend = !task.isExpend"><i :class="['iconfont icon-xiala', task.isExpend ? 'arrow-up':'']" /></div>
<el-collapse-transition>
<el-table v-if="isExpend" :data="userTableData" border style="width: 100%">
<el-table-column prop="fonds" label="全宗" align="center" />
<el-table-column prop="dept" label="部门" align="center" />
<el-table v-if="task.isExpend" :data="task.userTableData" border style="width: 100%">
<el-table-column prop="fondsName" label="全宗" align="center" />
<el-table-column prop="deptsName" label="部门" align="center" />
<el-table-column prop="username" label="用户名" align="center" />
</el-table>
</el-collapse-transition>
@ -46,7 +46,7 @@
</div>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="cuDialogVisible=false">取消</el-button>
<el-button @click="handleCloseDialog">取消</el-button>
<el-button type="primary" :loading="loading" @click="save">保存</el-button>
</div>
</div>
@ -54,8 +54,8 @@
</template>
<script>
import { FetchInitFlowAll, FetchFindFolwImgByModelId } from '@/api/system/flowable'
import { getAllJob } from '@/api/system/job'
import { FetchInitFlowAll, FetchFindFolwImgByModelId, FetchUserTaskAllByDeployId } from '@/api/system/flowable'
import { FetchPostAll, FetchFindUserByPost } from '@/api/system/job'
export default {
data() {
return {
@ -63,9 +63,7 @@ export default {
loading: false,
loadingImg: false,
form: {
modelId: null,
task01: null,
task02: null
modelId: null
},
modelOptions: [],
srcImg: '',
@ -79,16 +77,21 @@ export default {
rules: {
modelId: [
{ required: true, message: '流程模板不可为空', trigger: 'change' }
],
task01: [
{ required: true, message: '执行岗位不可为空', trigger: 'change' }
],
task02: [
{ required: true, message: '执行岗位不可为空', trigger: 'change' }
]
},
isExpend: false,
userTableData: []
userTableData: [],
taskList: []
}
},
computed: {
dynamicRules() {
return (index) => {
return [{
required: true,
message: '执行岗位不可为空',
trigger: 'change'
}]
}
}
},
mounted() {
@ -101,6 +104,7 @@ export default {
this.modelOptions = res.map(item => {
const json = {}
json.procdefId = item.procdefId
json.deployId = item.deployId
json.value = item.modelKey
json.label = item.deployName
return json
@ -117,10 +121,23 @@ export default {
}).catch(err => {
console.log(err)
})
console.log(val)
FetchUserTaskAllByDeployId({ 'deployId': val.deployId }).then((res) => {
this.taskList = res.map(item => {
return {
...item,
isExpend: false,
userTableData: []
}
})
console.log(this.taskList)
}).catch(err => {
console.log(err)
})
},
getAllJob() {
getAllJob().then((res) => {
this.jobOptions = res.content.map(item => {
FetchPostAll().then((res) => {
this.jobOptions = res.map(item => {
const json = {}
json.value = item.id
json.label = item.postName
@ -130,15 +147,32 @@ export default {
console.log(err)
})
},
selectJob(val, index) {
FetchFindUserByPost({ 'postId': val }).then((res) => {
this.taskList.forEach((item, i) => {
if (index === i) { item.userTableData = res }
})
}).catch(err => {
console.log(err)
})
},
save() {
// this.loading = true
this.$refs['form'].validate((valid) => {
console.log(this.form)
if (valid) {
this.loading = true
// this.loading = false
} else {
return false
}
})
},
handleCloseDialog(done) {
//
this.$refs.form.resetFields()
this.srcImg = ''
this.taskList = []
this.cuDialogVisible = false
}
}
}

Loading…
Cancel
Save