1
0
mirror of https://github.com/PanJiaChen/vue-element-admin.git synced 2025-08-15 08:19:59 +08:00
elsiosanchez b45619fa74
addAction (#470)
* addAction

* minimal change

* minimal change
2020-04-29 17:02:01 -04:00

169 lines
4.9 KiB
JavaScript

import Field from '@/components/ADempiere/Field'
import { createFieldFromDefinition, createFieldFromDictionary } from '@/utils/ADempiere/lookupFactory'
export default {
name: 'FormMixn',
components: {
Field
},
props: {
metadata: {
type: Object,
required: true
}
},
data() {
return {
fieldsList: [],
panelMetadata: {},
isLoaded: false,
panelType: 'form'
}
},
computed: {
getterPanel() {
return this.$store.getters.getPanel(this.metadata.containerUuid)
}
},
created() {
this.getPanel()
},
methods: {
createFieldFromDefinition,
createFieldFromDictionary,
async getPanel() {
const panel = this.getterPanel
if (panel) {
this.fieldsList = panel.fieldList
this.isLoaded = true
} else {
await this.generateFieldsList()
this.$store.dispatch('addPanel', {
...this.metadata,
uuid: this.metadata.containerUuid,
panelType: this.panelType,
fieldList: this.fieldsList
})
.then(responsePanel => {
this.fieldsList = responsePanel.fieldList
this.$store.dispatch('changeFormAttribute', {
containerUuid: this.metadata.containerUuid,
attributeName: 'fieldList',
attributeValue: this.fieldsList
})
})
.finally(() => {
this.isLoaded = true
})
}
},
generateFieldsList() {
let sequence = 0
const incrementSequence = (newValue) => {
if (newValue) {
sequence = newValue
}
sequence = sequence + 10
return sequence
}
return new Promise(resolve => {
const additionalAttributes = {
containerUuid: this.metadata.containerUuid,
isEvaluateValueChanges: false,
panelType: this.panelType
}
const fieldsListFromDictionary = []
const fieldsListFromMetadata = []
this.fieldsList.forEach(fieldElement => {
if (fieldElement.isFromDictionary) {
// set sequence
if (fieldElement.overwriteDefinition) {
if (this.isEmptyValue(fieldElement.overwriteDefinition.sequence)) {
fieldElement.overwriteDefinition.sequence = incrementSequence()
} else {
incrementSequence(fieldElement.overwriteDefinition.sequence)
}
} else {
fieldElement.overwriteDefinition = {}
fieldElement.overwriteDefinition.sequence = incrementSequence()
}
fieldsListFromDictionary.push(
this.createFieldFromDictionary({
...fieldElement,
...additionalAttributes
})
)
} else {
// set sequence
if (fieldElement.definition) {
if (this.isEmptyValue(fieldElement.definition.sequence)) {
fieldElement.definition.sequence = incrementSequence()
} else {
incrementSequence(fieldElement.definition.sequence)
}
} else {
fieldElement.definition = {}
fieldElement.definition.sequence = incrementSequence()
}
fieldsListFromMetadata.push(
this.createFieldFromDefinition({
...fieldElement,
...additionalAttributes
})
)
}
})
let fieldsList = fieldsListFromMetadata
if (this.isEmptyValue(fieldsListFromDictionary)) {
this.fieldsList = fieldsList
resolve(fieldsList)
this.isLoaded = true
} else {
Promise.all(fieldsListFromDictionary)
.then(responsefields => {
fieldsList = fieldsList.concat(responsefields)
resolve(fieldsList)
this.fieldsList = fieldsList
this.isLoaded = true
})
}
})
},
// Set value for one field from panel
// use example: setValue('ProductName', 'Patio Fun')
setValue(columnName, value) {
this.$store.dispatch('notifyFieldChange', {
containerUuid: this.metadata.containerUuid,
panelType: this.metadata.panelType,
columnName,
newValue: value
})
},
// Set values for all list of columns
// Use example: setValues(values)
setValues({ values = {}, withOutColumnNames = [] }) {
this.$store.dispatch('notifyPanelChange', {
containerUuid: this.metadata.containerUuid,
panelType: this.metadata.panelType,
newValues: values,
withOutColumnNames,
isChangedAllValues: true
})
},
addAction(action) {
this.$store.dispatch('addAction', {
name: action.name,
action: action.action,
containerUuid: this.metadata.containerUuid
})
}
}
}