This commit is contained in:
yanran200730
2022-02-18 13:43:37 +08:00
parent 2a8c3cd45f
commit fd76ce7ac1
7 changed files with 159 additions and 148 deletions

View File

@@ -11,7 +11,7 @@
</template>
<template #content v-if="refresh">
<baseInfo ref="baseInfo" :instance="instance" :dict="dict" v-show="activeStep==0"/>
<applyForm ref="applyForm" :instance="instance" :dict="dict" v-show="activeStep==1"/>
<applyForm ref="applyForm" :value="filedList" :instance="instance" :dict="dict" v-show="activeStep==1"/>
<attachmentMaterial ref="attachmentMaterial" :instance="instance" v-show="activeStep==2"/>
<processApproval ref="processApproval" :approvalSteps="applyForm.approvalSteps" :instance="instance"
:dict="dict" v-show="activeStep==3"/>
@@ -52,8 +52,11 @@ export default {
approvalSteps: "",
},
processAnnexDefs: [],
detailObj: {},
detailObj: {
tableInfo: {}
},
refresh: true,
filedList: [],
tableFieldInfos: []
}
},
@@ -120,6 +123,7 @@ export default {
...this.baseInfo,
processDefStatus: Number(this.baseInfo.processDefStatus),
tableInfo: {
...this.detailObj.tableInfo,
tableFieldInfos: this.tableFieldInfos
},
tableType: 0,
@@ -140,6 +144,7 @@ export default {
this.instance.post(`/app/approval-process-def/info-id`, null, {params: {id}}).then(res => {
if (res?.data) {
this.detailObj = res.data
this.filedList = res.data.tableInfo.tableFieldInfos
this.refreshDetail()
}
})

View File

@@ -66,54 +66,32 @@
<span>删除字段</span>
</div>
<el-form-item style="width: 100%;" :label="item.fieldName" :rules="[{ required: item.mustFill === '1' ? true : false }]">
<template v-if="(item.type === 'textarea')">
<el-input :disabled="item.disable === '1'" :rows="item.lineNumber" size="small" type="textarea" :placeholder="item.fieldTips" v-model="item.defaultValue"></el-input>
<template v-if="item.fieldDataType === '1'">
<el-input :disabled="item.disable === '1'" size="small" placeholder="请输入" v-model="item.defaultValue"></el-input>
</template>
<template v-if="item.type === 'radio'">
<template v-if="item.fieldDataType === '4'">
<el-radio-group v-model="item.defaultValue" :disabled="item.disable === '1'">
<el-radio :label="field.label" v-for="(field, index) in item.options" :key="index">{{ field.label }}</el-radio>
</el-radio-group>
</template>
<template v-if="item.type === 'number'">
<template v-if="item.fieldDataType === '0'">
<el-input-number style="width: 100%;" v-model="item.defaultValue" :placeholder="item.fieldTips"></el-input-number>
</template>
<template v-if="item.type === 'rtf'">
<ai-editor v-model="item.defaultValue" :placeholder="item.fieldTips" :instance="instance"/>
</template>
<template v-if="item.type === 'time'">
<template v-if="item.fieldDataType === '3'">
<el-date-picker
v-model="item.defaultValue"
size="small"
:placeholder="item.fieldTips">
</el-date-picker>
</template>
<template v-if="item.type === 'date'">
<template v-if="item.fieldDataType === '8'">
<el-date-picker
v-model="item.defaultValue"
size="small"
:placeholder="item.fieldTips">
</el-date-picker>
</template>
<template v-if="item.type === 'datetime'">
<el-date-picker
v-model="item.defaultValue"
size="small"
:placeholder="item.fieldTips">
</el-date-picker>
</template>
<template v-if="item.type === 'onOff'">
<el-switch active-value="1" inactive-value="0" v-model="item.defaultValue"></el-switch>
</template>
<template v-if="['input', 'phone', 'name', 'idNumber'].includes(item.type)">
<el-input :disabled="item.disable === '1'" :maxlength="Number(item.maxLength)" size="small" :placeholder="item.fieldTips" v-model="item.defaultValue"></el-input>
</template>
<template v-if="item.type === 'area'">
<ai-area-get
:instance="instance"
always-show
/>
</template>
<template v-if="item.type === 'select'">
<template v-if="item.fieldDataType === '9'">
<el-select :disabled="item.disable === '1'" style="width: 100%;" size="small" :placeholder="item.fieldTips" v-model="item.defaultValue">
<el-option
v-for="(filed, index) in item.options"
@@ -123,17 +101,11 @@
</el-option>
</el-select>
</template>
<template v-if="item.type === 'checkbox'" >
<template v-if="item.fieldDataType === '5'" >
<el-checkbox-group v-model="item.defaultValue" :disabled="item.disable === '1'">
<el-checkbox :label="field.label" v-for="(field, index) in item.options" :key="index">{{ field.label }}</el-checkbox>
</el-checkbox-group>
</template>
<template v-if="item.type === 'upload'">
<div class="left-item__item--upload">
<i class="iconfont iconAdd"></i>
<span>添加附件</span>
</div>
</template>
</el-form-item>
</div>
</draggable>
@@ -190,7 +162,7 @@
<h2>最多输入字符</h2>
</div>
<div class="right-item__content">
<el-input placeholder="字符个数" v-model="currTarget.maxLength">
<el-input placeholder="字符个数" v-model="currTarget.fieldLength">
<span slot="append"></span>
</el-input>
</div>
@@ -215,17 +187,11 @@
export default {
name: 'applyForm',
model: {
prop: 'value',
event: 'change',
},
props: {
instance: Function,
dict: Object,
params: Object,
type: String,
areaId: String,
value: Array
},
@@ -252,43 +218,17 @@
},
watch: {
value (v) {
if (v) {
let arr = JSON.parse(JSON.stringify(v))
let groups = this.unique(arr.map(v => v.groupName))
this.targetList = groups.map(groupName => {
const column = arr.filter(v => v.groupName === groupName).map(item => {
if (['9', '4', '5'].includes(item.fieldDataType)) {
item.options = item.selectValues.split('`').map(v => {
return {
label: v,
value: ''
}
})
}
if (item.grid) {
item.grid = Number(item.grid)
}
return item
})
return {
type: 'group',
fieldName: '卡片',
fixedLabel: '卡片',
icon: 'iconpic',
groupName,
column: column
}
})
}
},
activeIndex () {
if (this.activeIndex > -1 && this.groupIndex > -1 && !this.isGroup) {
const filed = this.targetList[this.groupIndex].column[this.activeIndex]
this.currTarget = filed
return
}
if (this.groupIndex > -1 && this.isGroup) {
this.currTarget = this.targetList[this.groupIndex]
this.currTarget = this.targetList[this.groupIndex].column[this.activeIndex]
return
}
@@ -312,13 +252,8 @@
}
},
computed: {
currComponentTitle () {
return '表单设置'
}
},
mounted () {
this.init()
},
methods: {
@@ -328,6 +263,39 @@
this.targetList[j].column.splice(i, 1)
},
init () {
if (this.value.length) {
let arr = this.value
let groups = this.unique(arr.map(v => v.groupName))
this.targetList = groups.map(groupName => {
const column = arr.filter(v => v.groupName === groupName).map(item => {
if (['9', '4', '5'].includes(item.fieldDataType)) {
item.options = item.selectValues.split('`').map(v => {
return {
label: v,
value: ''
}
})
}
return {
...item,
grid: 1
}
})
return {
type: 'group',
fieldName: '卡片',
fixedLabel: '卡片',
icon: 'iconpic',
groupName,
column: column
}
})
}
},
removeGroup () {
if (this.targetList.length === 1) {
return this.$message.error('分组不能小于1')
@@ -348,13 +316,11 @@
onConfirm () {
let result = []
this.targetList.forEach((group, i) => {
group.column.forEach((item, index) => {
group.column.forEach(item => {
result.push({
...item,
groupIndex: i,
fieldLength: item.maxLength,
groupName: group.groupName,
fieldDbName: this.isUnique(item.type) ? item.type : `${item.type}${i}${index}`,
selectValues: item.options ? item.options.map(v => v.label).join('`') : ''
})
})
@@ -365,12 +331,6 @@
})
},
isUnique (type) {
const list = this.components[0].children.map(v => v.type)
return list.indexOf(type) > -1
},
addOptions () {
const len = this.targetList[this.groupIndex].column[this.activeIndex].options.length
let label = `选项${len + 1}`

View File

@@ -15,7 +15,7 @@ export const components = [
defaultValue: '',
icon: 'icontext_box',
mustFill: '1',
maxLength: 20
fieldLength: 20
},
{
type: 'idNumber',
@@ -25,7 +25,7 @@ export const components = [
defaultValue: '',
icon: 'icontext_area',
mustFill: '1',
maxLength: 20,
fieldLength: 20,
disable: '0',
grid: 1,
fieldDataType: '1',
@@ -39,7 +39,7 @@ export const components = [
defaultValue: '',
icon: 'icontext_area',
mustFill: '1',
maxLength: 11,
fieldLength: 11,
disable: '0',
grid: 1,
fieldDataType: '1',
@@ -165,7 +165,7 @@ export const components = [
defaultValue: '',
icon: 'icontext_box',
mustFill: '1',
maxLength: 50
fieldLength: 50
},
{
type: 'number',
@@ -179,7 +179,7 @@ export const components = [
decimalPlaces: 0,
fieldDataType: '0',
minValue: 0,
maxLength: 500,
fieldLength: 50,
disable: '0',
grid: 1,
}