perf: 外置表单模版

saber
ssc 4 years ago
parent 971c5bc5a0
commit 50a870b23b
  1. 2
      src/views/plugin/workflow/mixins/ex-form.js
  2. 153
      src/views/plugin/workflow/process/external/Leave/detail.vue
  3. 118
      src/views/plugin/workflow/process/external/Leave/start.vue

@ -345,7 +345,7 @@ export default {
}
// 汇总表单打印
const summaryOption = this.deepClone(this.summaryOption)
if (this.summaryOption.group) {
if (this.summaryOption && this.summaryOption.group) {
this.summaryOption.group.forEach(g => {
g.collapse = false
g.column.forEach(col => {

@ -108,25 +108,101 @@ export default {
defaults: {},
form: {},
option: {
column: [{
label: '请假时间',
prop: 'datetime',
type: 'datetimerange',
format: 'yyyy-MM-dd HH:mm:ss',
valueFormat: 'yyyy-MM-dd HH:mm:ss',
rules: [{ required: true, message: '请选择请假时间' }]
}, {
label: '请假天数',
prop: 'days',
type: 'number',
rules: [{ required: true, message: '请输入请假天数' }]
}, {
label: '请假理由',
prop: 'reason',
type: 'textarea',
span: 24,
rules: [{ required: true, message: '请输入请假理由' }]
}]
column: [
{
type: 'input',
label: '创建人',
span: 12,
display: true,
prop: 'creator',
value: '${this.$store.getters.userInfo.nick_name}',
readonly: true
},
{
type: 'input',
label: '创建部门',
span: 12,
display: true,
prop: 'createDept',
value: '${this.$store.getters.userInfo.dept_name}',
readonly: true
},
{
type: 'datetimerange',
label: '请假时间',
span: 12,
display: true,
format: 'yyyy-MM-dd HH:mm:ss',
valueFormat: 'yyyy-MM-dd HH:mm:ss',
prop: 'datetime',
required: true,
rules: [
{
required: true,
message: '开始时间必须填写'
}
],
change: ({ value }) => {
if (!value || value.length == 0) {
this.$set(this.form, 'days', undefined)
} else {
const d1 = Date.parse(value[0])
const d2 = Date.parse(value[1])
const day = (d2 - d1) / (1 * 24 * 60 * 60 * 1000)
this.$set(this.form, 'days', Number(day.toFixed(2)))
}
}
},
{
type: 'number',
label: '请假天数',
span: 12,
display: true,
prop: 'days',
required: true,
rules: [
{
required: true,
message: '请假天数必须填写'
}
],
controls: true,
controlsPosition: 'right',
change: ({ value }) => {
this.$set(this.form, 'reason', '请假' + value + '天')
}
},
{
type: 'textarea',
label: '请假理由',
span: 24,
display: true,
prop: 'reason',
required: true,
rules: [
{
required: true,
message: '请假理由必须填写'
}
]
},
{
label: '附件',
type: 'upload',
propsHttp: {
res: 'data',
url: 'link',
name: 'originalName'
},
action: '/api/blade-resource/oss/endpoint/put-file',
display: true,
span: 24,
showFileList: true,
multiple: true,
limit: 10,
prop: 'attachment'
},
]
},
vars: [], //
submitLoading: false, // loading
@ -144,20 +220,13 @@ export default {
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 => {
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])
}
delete col.value
})
}
@ -167,41 +236,26 @@ export default {
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])
}
delete col.value
})
}
})
}
} else {
const columnFilter = this.filterAvueColumn(column, taskForm)
const columnFilter = this.filterAvueColumn(column, taskForm, true)
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)
const groupFilter = this.filterAvueColumn(gro.column, taskForm, true)
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
@ -210,6 +264,15 @@ export default {
if (!variables[key]) delete variables[key]
}
if (option.column && process.variables && process.variables.serialNumber) {
option.column.unshift({
label: '流水号',
prop: 'serialNumber',
span: 24,
detail: true,
})
}
this.option = option
this.form = variables
this.waiting = false

@ -91,25 +91,101 @@ export default {
form: {},
option: {
menuBtn: false,
column: [{
label: '请假时间',
prop: 'datetime',
type: 'datetimerange',
format: 'yyyy-MM-dd HH:mm:ss',
valueFormat: 'yyyy-MM-dd HH:mm:ss',
rules: [{ required: true, message: '请选择请假时间' }]
}, {
label: '请假天数',
prop: 'days',
type: 'number',
rules: [{ required: true, message: '请输入请假天数' }]
}, {
label: '请假理由',
prop: 'reason',
type: 'textarea',
span: 24,
rules: [{ required: true, message: '请输入请假理由' }]
}]
column: [
{
type: 'input',
label: '创建人',
span: 12,
display: true,
prop: 'creator',
value: '${this.$store.getters.userInfo.nick_name}',
readonly: true
},
{
type: 'input',
label: '创建部门',
span: 12,
display: true,
prop: 'createDept',
value: '${this.$store.getters.userInfo.dept_name}',
readonly: true
},
{
type: 'datetimerange',
label: '请假时间',
span: 12,
display: true,
format: 'yyyy-MM-dd HH:mm:ss',
valueFormat: 'yyyy-MM-dd HH:mm:ss',
prop: 'datetime',
required: true,
rules: [
{
required: true,
message: '开始时间必须填写'
}
],
change: ({ value }) => {
if (!value || value.length == 0) {
this.$set(this.form, 'days', undefined)
} else {
const d1 = Date.parse(value[0])
const d2 = Date.parse(value[1])
const day = (d2 - d1) / (1 * 24 * 60 * 60 * 1000)
this.$set(this.form, 'days', Number(day.toFixed(2)))
}
}
},
{
type: 'number',
label: '请假天数',
span: 12,
display: true,
prop: 'days',
required: true,
rules: [
{
required: true,
message: '请假天数必须填写'
}
],
controls: true,
controlsPosition: 'right',
change: ({ value }) => {
this.$set(this.form, 'reason', '请假' + value + '天')
}
},
{
type: 'textarea',
label: '请假理由',
span: 24,
display: true,
prop: 'reason',
required: true,
rules: [
{
required: true,
message: '请假理由必须填写'
}
]
},
{
label: '附件',
type: 'upload',
propsHttp: {
res: 'data',
url: 'link',
name: 'originalName'
},
action: '/api/blade-resource/oss/endpoint/put-file',
display: true,
span: 24,
showFileList: true,
multiple: true,
limit: 10,
prop: 'attachment'
},
]
},
process: {},
loading: false
@ -124,10 +200,10 @@ export default {
const { column, group } = option
const groupArr = []
const columnArr = this.filterAvueColumn(column, startForm).column
const columnArr = this.filterAvueColumn(column, startForm, true).column
if (group && group.length > 0) { // group
group.forEach(gro => {
gro.column = this.filterAvueColumn(gro.column, startForm).column
gro.column = this.filterAvueColumn(gro.column, startForm, true).column
if (gro.column.length > 0) groupArr.push(gro)
})
}

Loading…
Cancel
Save