🎉 1.2.9.RELEASE

master
ssc 4 years ago
parent 71d7781e31
commit b5a577bee6
  1. 2
      public/cdn/avue-form-design/index.umd.min.js
  2. 297
      public/cdn/wf-design/index.umd.min.js
  3. 4
      public/index.html
  4. 38
      src/views/plugin/workflow/design/index.vue
  5. 1
      src/views/plugin/workflow/mixins/custom-fields.js
  6. 13
      src/views/plugin/workflow/mixins/ex-form.js
  7. 142
      src/views/plugin/workflow/process/components/detail.vue
  8. 162
      src/views/plugin/workflow/util/watermark.js

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -15,7 +15,7 @@
<link rel="stylesheet" href="<%= BASE_URL %>cdn/iconfont/index.css">
<link rel="stylesheet" href="<%= BASE_URL %>cdn/iconfont/avue/iconfont.css">
<link rel="stylesheet" href="<%= BASE_URL %>cdn/iconfont/saber/iconfont.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@smallwei/avue@2.8.18/lib/index.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@smallwei/avue@2.8.23/lib/index.css">
<script src="<%= BASE_URL %>cdn/xlsx/FileSaver.min.js"></script>
<script src="<%= BASE_URL %>cdn/xlsx/xlsx.full.min.js"></script>
<link rel="icon" href="<%= BASE_URL %>favicon.png">
@ -109,7 +109,7 @@
<script src="<%= BASE_URL %>cdn/vue-router/3.0.1/vue-router.min.js" charset="utf-8"></script>
<script src="<%= BASE_URL %>cdn/axios/1.0.0/axios.min.js" charset="utf-8"></script>
<script src="<%= BASE_URL %>cdn/element-ui/2.15.1/index.js" charset="utf-8"></script>
<script src="https://cdn.jsdelivr.net/npm/@smallwei/avue@2.8.18" charset="utf-8"></script>
<script src="https://cdn.jsdelivr.net/npm/@smallwei/avue@2.8.23" charset="utf-8"></script>
<script src="<%= BASE_URL %>cdn/avue-form-design/index.umd.min.js" charset="utf-8"></script>
<script src="<%= BASE_URL %>cdn/wf-design/index.umd.min.js" charset="utf-8"></script>
</body>

@ -105,6 +105,8 @@ export default {
this.$set(this.step1.form, 'column', column)
this.$set(this.step1.form, 'formType', 2)
this.$set(this.step1.form, 'exFormKey', formKey.substring(6))
} else if (formKey.startsWith('wf_indep_')) {
this.$set(this.step1.form, 'formType', 3)
} else {
this.$set(this.step1.form, 'formKey', formKey)
}
@ -155,6 +157,9 @@ export default {
}, {
label: '外置表单',
value: 2
}, {
label: '节点独立表单',
value: 3
}],
span: 24,
value: 1,
@ -167,13 +172,20 @@ export default {
this.findObject(this.step1.option.group[0].column, 'formKey').display = true
this.findObject(this.step1.option.group[0].column, 'tip').display = true
this.findObject(this.step1.option.group[1].column, 'form').display = true
} else {
} else if (val == 2) {
this.findObject(this.step1.option.group[0].column, 'exFormKey').display = true
this.findObject(this.step1.option.group[1].column, 'column').display = true
this.findObject(this.step1.option.group[0].column, 'formKey').display = false
this.findObject(this.step1.option.group[0].column, 'tip').display = false
this.findObject(this.step1.option.group[1].column, 'form').display = false
this.step1.option.group[1].display = true
} else if (val == 3) {
this.findObject(this.step1.option.group[0].column, 'exFormKey').display = false
this.findObject(this.step1.option.group[1].column, 'column').display = false
this.findObject(this.step1.option.group[0].column, 'formKey').display = false
this.findObject(this.step1.option.group[0].column, 'tip').display = false
this.findObject(this.step1.option.group[1].column, 'form').display = false
this.step1.option.group[1].display = false
}
}
}
@ -212,7 +224,8 @@ export default {
}
}
},
rules: [{ required: true, message: '请选择表单' }]
rules: [{ required: true, message: '请选择表单' }],
display: true
}, {
labelWidth: 0,
prop: 'tip',
@ -300,11 +313,18 @@ export default {
if (formType == 1) { //
this.process.formKey = formKey
this.$set(this.step2.option, 'form', this.option)
} else { //
} else if (formType == 2) { //
this.process.formKey = "wf_ex_" + exFormKey
this.$set(this.step2.option, 'exForm', {
exFormKey, column
})
} else if (formType == 3) { //
this.$axios.get('/api/blade-workflow/design/form/list?size=-1&status=1').then(res => {
this.$set(this.step2.option, 'indepForm', {
mode: 'indep',
list: res.data.data.records
})
})
}
this.step++
done()
@ -322,10 +342,20 @@ export default {
}
},
handleSave() {
const { businessObject } = this.$refs.bpmn3.getElementRegistry().getAll()[0]
const registry = this.$refs.bpmn3.getElementRegistry().getAll()
const { businessObject } = registry[0]
const { id, name, documentation } = businessObject
const description = (documentation && documentation.length > 0) ? documentation[0].text : null
const { formType } = this.step1.form
if (formType == 3) { //
const startEvent = registry.find(r => r.type == 'bpmn:StartEvent')
if (startEvent) {
const indepFormKey = startEvent.businessObject.extensionElements.values.find(v => v.$type == 'flowable:indepFormKey')
if (indepFormKey) this.process.formKey = 'wf_indep_' + indepFormKey.value
}
}
const params = {
...this.process,
modelKey: id,

@ -26,7 +26,6 @@ export default {
action: '/api/blade-resource/oss/endpoint/put-file',
display: true,
span: 24,
canvasOption: { text: ' ' },
icon: 'icon-upload',
showFileList: true,
multiple: true,

@ -4,6 +4,7 @@ import Layout from '@/page/index/'
import defaultValues from './default-values'
import Print from '../util/print'
import Watermark from '../util/watermark'
import { mapGetters } from 'vuex'
@ -21,14 +22,10 @@ export default {
checkType: 'radio', // 人员选择check类型 radio单选 checkbox多选
comment: '', // 评论
bpmnOption: {}, // 流程图配置信息
watermarkText: '', //水印文字
defaultChecked: '', // 人员选择默认选中
waiting: true, // 骨架屏加载中
}
},
mounted() {
this.watermarkText = this.userInfo.user_name + " " + this.userInfo.real_name
},
methods: {
// 动态路由跳转
dynamicRoute(row, type, async = false) {
@ -280,9 +277,11 @@ export default {
}
this.$refs['user-select'].visible = false
},
handlePrint() { //打印
// this.watermark({ text: this.watermarkText })
Print(this.$refs.printBody)
handlePrint() { // 打印
// const watermarkText = this.userInfo.user_name + " " + this.userInfo.dept_name
// Watermark.set({ watermark_txt: watermarkText }) // 添加水印
Print('#printBody')
Watermark.remove() // 删除水印
},
// 关闭当前tag,并跳转
handleCloseTag(path) {

@ -19,7 +19,7 @@
<el-tab-pane label="申请信息"
name="first">
<el-card shadow="never">
<div ref="printBody"
<div id="printBody"
:class="process.status != 'todo' ? `wf-theme-${theme}`: ''">
<avue-form v-if="option && ((option.column && option.column.length > 0) || (option.group && option.group.length > 0))"
v-model="form"
@ -119,16 +119,60 @@ export default {
const { process, form } = res
const { variables, status } = process
let { allForm, taskForm } = form
if (allForm) {
const option = eval('(' + allForm + ')')
let { allForm, taskForm, formList } = form
if (formList && formList.length > 0) {
const options = {
menuBtn: false,
detail: true,
group: []
}
formList.forEach(f => {
const { content, taskName, taskKey } = f
const { option } = this.handleResolveOption(eval('(' + content + ')'), taskForm, 'done')
options.group.push({
label: taskName || taskKey,
column: option.column
})
})
this.option = options
} else if (allForm) {
const { option, vars } = this.handleResolveOption(eval('(' + allForm + ')'), taskForm, status)
option.menuBtn = false
const { column, group } = option
if (status != 'todo') { //
let event = ['change', 'blur', 'click', 'focus']
option.detail = true
if (column && column.length > 0) { // column
column.forEach(col => {
for (let key in variables) {
if (!variables[key]) delete variables[key]
}
this.option = option
this.vars = vars
}
this.form = variables
this.waiting = false
})
},
handleResolveOption(option, taskForm, status) {
const { column, group } = option
let vars = []
if (status != 'todo') { //
let event = ['change', 'blur', 'click', 'focus']
option.detail = true
if (column && column.length > 0) { // column
column.forEach(col => {
if (col.type == 'dynamic') col.children.column.forEach(cc => {
delete cc.value
delete cc.event
event.forEach(e => delete cc[e])
})
else {
delete col.value
delete col.event
event.forEach(e => delete col[e])
}
})
}
if (group && group.length > 0) { // group
group.forEach(gro => {
if (gro.column && gro.column.length > 0) {
gro.column.forEach(col => {
if (col.type == 'dynamic') col.children.column.forEach(cc => {
delete cc.value
delete cc.event
@ -141,61 +185,35 @@ export default {
}
})
}
})
}
} else {
const columnFilter = this.filterAvueColumn(column, taskForm)
const columnArr = columnFilter.column
vars = columnFilter.vars || []
if (group && group.length > 0) { // group
group.forEach(gro => {
if (gro.column && gro.column.length > 0) {
gro.column.forEach(col => {
if (col.type == 'dynamic') col.children.column.forEach(cc => {
delete cc.value
delete cc.event
event.forEach(e => delete cc[e])
})
else {
delete col.value
delete col.event
event.forEach(e => delete col[e])
}
})
}
})
}
} else {
const columnFilter = this.filterAvueColumn(column, taskForm)
const columnArr = columnFilter.column
let vars = columnFilter.vars || []
const groupArr = []
if (group && group.length > 0) { // group
group.forEach(gro => {
const groupFilter = this.filterAvueColumn(gro.column, taskForm)
gro.column = groupFilter.column
vars = vars.concat(groupFilter.vars)
if (gro.column.length > 0) groupArr.push(gro)
})
}
if (process.variables && process.variables.serialNumber) {
columnArr.unshift({
label: '流水号',
prop: 'serialNumber',
span: 24,
detail: true,
})
}
option.column = columnArr
option.group = groupArr
this.vars = vars
}
for (let key in variables) {
if (!variables[key]) delete variables[key]
}
const groupArr = []
if (group && group.length > 0) { // group
group.forEach(gro => {
const groupFilter = this.filterAvueColumn(gro.column, taskForm)
gro.column = groupFilter.column
vars = vars.concat(groupFilter.vars)
if (gro.column.length > 0) groupArr.push(gro)
})
}
this.option = option
this.form = variables
this.waiting = false
if (process.variables && process.variables.serialNumber) {
columnArr.unshift({
label: '流水号',
prop: 'serialNumber',
span: 24,
detail: true,
})
}
})
option.column = columnArr
option.group = groupArr
}
return { option, vars }
},
//
handleExamine(pass) {

@ -0,0 +1,162 @@
const watermark = {}
let watermarkId = ''
watermark.set = (options = {}) => {
//默认设置
let defaultSettings = {
watermark_txt: 'text',
watermark_x: 20, //水印起始位置x轴坐标
watermark_y: 20, //水印起始位置Y轴坐标
watermark_rows: 20, //水印行数
watermark_cols: 20, //水印列数
watermark_x_space: 50, //水印x轴间隔
watermark_y_space: 50, //水印y轴间隔
watermark_color: '#aaa', //水印字体颜色
watermark_alpha: 0.3, //水印透明度
watermark_fontsize: '16px', //水印字体大小
watermark_font: '微软雅黑', //水印字体
watermark_width: 120, //水印宽度
watermark_height: 60, //水印长度
watermark_angle: 15, //水印倾斜度数
id: 'printBody', // 加水印元素
...options
}
watermarkId = defaultSettings.id
//采用配置项替换默认值,作用类似jquery.extend
if (arguments.length === 1 && typeof arguments[0] === 'object') {
const src = arguments[0] || {}
for (let key in src) {
if (src[key] && defaultSettings[key] && src[key] === defaultSettings[key]) {
console.log()
} else if (src[key]) {
defaultSettings[key] = src[key]
}
}
}
let oTemp = document.createDocumentFragment()
//获取页面最大宽度
let page_width = Math.max(
document.body.scrollWidth,
document.body.clientWidth
)
let cutWidth = page_width * 0.015
page_width = page_width - cutWidth
//获取页面最大高度
let page_height =
Math.max(document.body.scrollHeight, document.body.clientHeight) + 450
// var page_height = document.body.scrollHeight+document.body.scrollTop;
//如果将水印列数设置为0,或水印列数设置过大,超过页面最大宽度,则重新计算水印列数和水印x轴间隔
if (
defaultSettings.watermark_cols == 0 ||
parseInt(
defaultSettings.watermark_x +
defaultSettings.watermark_width * defaultSettings.watermark_cols +
defaultSettings.watermark_x_space *
(defaultSettings.watermark_cols - 1)
) > page_width
) {
defaultSettings.watermark_cols = parseInt(
(page_width -
defaultSettings.watermark_x +
defaultSettings.watermark_x_space) /
(defaultSettings.watermark_width +
defaultSettings.watermark_x_space)
)
defaultSettings.watermark_x_space = parseInt(
(page_width -
defaultSettings.watermark_x -
defaultSettings.watermark_width * defaultSettings.watermark_cols) /
(defaultSettings.watermark_cols - 1)
)
}
//如果将水印行数设置为0,或水印行数设置过大,超过页面最大长度,则重新计算水印行数和水印y轴间隔
if (
defaultSettings.watermark_rows == 0 ||
parseInt(
defaultSettings.watermark_y +
defaultSettings.watermark_height * defaultSettings.watermark_rows +
defaultSettings.watermark_y_space *
(defaultSettings.watermark_rows - 1)
) > page_height
) {
defaultSettings.watermark_rows = parseInt(
(defaultSettings.watermark_y_space +
page_height -
defaultSettings.watermark_y) /
(defaultSettings.watermark_height +
defaultSettings.watermark_y_space)
)
defaultSettings.watermark_y_space = parseInt(
(page_height -
defaultSettings.watermark_y -
defaultSettings.watermark_height * defaultSettings.watermark_rows) /
(defaultSettings.watermark_rows - 1)
)
}
let x
let y
for (let i = 0; i < defaultSettings.watermark_rows; i++) {
y =
defaultSettings.watermark_y +
(defaultSettings.watermark_y_space +
defaultSettings.watermark_height) *
i
for (let j = 0; j < defaultSettings.watermark_cols; j++) {
x =
defaultSettings.watermark_x +
(defaultSettings.watermark_width +
defaultSettings.watermark_x_space) *
j
let mask_div = document.createElement('div')
mask_div.id = 'mask_div' + i + j
mask_div.className = 'mask_div'
mask_div.appendChild(
document.createTextNode(defaultSettings.watermark_txt)
)
//设置水印div倾斜显示
mask_div.style.webkitTransform =
'rotate(-' + defaultSettings.watermark_angle + 'deg)'
mask_div.style.MozTransform =
'rotate(-' + defaultSettings.watermark_angle + 'deg)'
mask_div.style.msTransform =
'rotate(-' + defaultSettings.watermark_angle + 'deg)'
mask_div.style.OTransform =
'rotate(-' + defaultSettings.watermark_angle + 'deg)'
mask_div.style.transform =
'rotate(-' + defaultSettings.watermark_angle + 'deg)'
mask_div.style.visibility = ''
mask_div.style.position = 'absolute'
mask_div.style.left = x + 'px'
mask_div.style.top = y + 'px'
mask_div.style.overflow = 'hidden'
mask_div.style.zIndex = '9999'
mask_div.style.pointerEvents = 'none' //pointer-events:none 让水印不遮挡页面的点击事件
//mask_div.style.border="solid #eee 1px";
mask_div.style.opacity = defaultSettings.watermark_alpha
mask_div.style.fontSize = defaultSettings.watermark_fontsize
mask_div.style.fontFamily = defaultSettings.watermark_font
mask_div.style.color = defaultSettings.watermark_color
mask_div.style.textAlign = 'center'
mask_div.style.width = defaultSettings.watermark_width + 'px'
mask_div.style.height = defaultSettings.watermark_height + 'px'
mask_div.style.display = 'block'
oTemp.appendChild(mask_div)
}
}
document.getElementById(defaultSettings.id).appendChild(oTemp)
}
watermark.remove = () => {
const wm = document.querySelectorAll('.mask_div')
if (wm && wm.length > 0) {
wm.forEach(ele => {
document.getElementById(watermarkId).removeChild(ele)
})
}
}
export default watermark
Loading…
Cancel
Save